2009-11-21 13 views
8

Aparece este error en un evento .click() en jQuery. Lo veo en Firebug. Uso la última versión, 1.3.2 (mínimo) El clic dispara una solicitud $ .ajax() para un Formulario en mi sitio web. Le pregunté a Google sobre esto y todo lo que sabe es "%" o "[@]" como expresiones no reconocidas, nada sobre el "#".excepción no detectada: error de sintaxis, expresión no reconocida: #

aquí es un poco de mi código:

$("form#buyForm #submitForm").live("click", function(e) { 
     var errors = 0; 

     var inputLastName_value = $("form#buyForm input#userLastName").val(); 
     if (inputLastName_value == "") { 
     errors = 1; 
     formErrorHandling("#userLastName"); 
     return false; 
     } 
     return false; 
    }); 

De esta manera puedo comprobar todas mis entradas para los errores, y luego llamo formErrorHandling() que hace algo de mostrar/ocultar, cosas por el estilo, nada importante.

He leído que podría ser de un selector mío, pero todos parecen estar bien.

¿Alguien más tuvo el mismo problema?

Gracias.

+0

¿Existe una razón por la que están anidando '# ids' en sus selectores? Un identificador de elemento debe ser único en la página, por lo que anidarlos o especificarlos con 'form' o' input' parece un poco extraño. –

+2

Lo que quiero decir es, ¿por qué usar 'form # buyForm # submitForm' cuando se puede decir' # submitForm' etc. –

+1

dcneiner, sí, los identificadores deben ser y son únicos. El motivo por el que uso el nombre de etiqueta antes del selector, al menos por lo que he leído, es la velocidad. Así que jQuery usa el getElementByTagName y sabe exactamente qué buscar, en lugar de buscar todos los ID de mi página. – Adrian

Respuesta

8

Por lo que puedo ver la excepción parece estar de alguna manera provocada por el plugin jScrollPane que está utilizando.

Intente reemplazar la secuencia de comandos que incluye (v1.2.3 que es tan antigua como a partir de diciembre de 2008) con una versión más nueva directamente desde el enlace troncal. Que incluye muchas mejoras con respecto a v.1.2.3 y fija la excepción para mí jScrollPane.js (jScrollPane.min.js versión miniaturizada del R87 JScrollPane minified con yuicompressor)


eliminado cosas viejas que ya no necesita respuesta

+0

jitter, no sé dónde ocurre la excepción, lo interesante es que esto solo ocurre con uno de los formularios (tengo dos formularios en mi sitio web, ambos usando la misma función formErrorHandling() y siguiendo el mismo patrón de código) I publicado el JS que contiene esta parte del manejo de formularios aquí: http://artdevmedia.net/gds/test.js nota: la función principal que incluye los formularios relacionados se llama después de un éxito de solicitud de Ajax. – Adrian

+0

check respuesta expandida: especialmente la parte sobre '$ (" # "+ id)' y 'elements: textarea' – jitter

+0

Hola jitter gracias por tu tiempo. Probé una y otra vez y creo que el error podría no ser causado por mis formularios o por la función de manejo de errores. Ese es uno. Dos, no sucede todo el tiempo. De todos modos, si tiene tiempo, mire aquí: artdevmedia.net/gds: esto es lo que encontré: si hace clic en "COMPRAR ALBUM" y luego continúa con el formulario, etc., no hay excepción.Ahora, haga clic en "VIDEO" y luego haga clic en X para cerrar el video. A veces es el momento en que se lanza una excepción, otras veces, la excepción se lanza después de cerrar Video y volver al formulario BUY ALBUM y enviarlo – Adrian

0

¿cómo se ve la función formErrorHandling? ¿Está esperando un selector o un objeto jQuery?

tal vez lo que necesita es llamar así

formErrorHandling($("#userLastName")); 
+0

hola Victor, la función formErrorHandling se ve así: function formErrorHandling (id, filter) {id = id.replace ("#", ""); ...} luego hago un cambio (id) y luego muestro el error de mensaje correcto para esa identificación. (y si tiene filtro, muestre un mensaje específico) – Adrian

+0

Adrian, si está eliminando el "#", ¿por qué se molesta en configurarlo cuando ejecuta la función? –

+0

Bueno, tienes razón, podría simplemente llamar a formErroHandling ("userLastName") sin #, y no eliminarlo en la función. Lo dejé allí, para un mejor seguimiento de mi código. Al menos, para mí, eso ayuda. – Adrian

1

Sept 2011

cambiado de

$(document).ready(function() { 
    $('#'+id).creatorCall({init:param}) ; 
}); 

a

$(document).ready(function() { 
    $(this).creatorCall({init:param}) ; 
}); 

y curados que sí misma uncaught exception: Syntax error, unrecognized expression: # mensaje

0

Sé que es una cuestión de edad y no hay una versión más nueva JScrollPane pero ya que tenía que utilizar una corriente de debido a una serie de cuestiones de legado aquí está la solución.Si va a utilizar jScrollPane.js de la respuesta anterior es necesario cambiar el código en la línea 534:

cambio:

if (h && h.substr(0, 1) == '#' && h.length > 1) { 

a

if (h && h!='#' && h.substr(0, 1) == '#' && h.length > 1) { 

entero trozo del código responsable de clics de documentos con la corrección:

$(document).bind('click', function(e){ 
    $target = $(e.target); 
    if ($target.is('a')) { 
     var h = $target.attr('href'); 
     if (h && h!='#' && h.substr(0, 1) == '#' && h.length > 1) { 
      setTimeout(function(){ 
       scrollTo(h, !settings.animateToInternalLinks); 
      }, $.browser.safari ? 100 : 0); 
     } 
    } 
}); 

Básicamente, el scrollTo función será ignorada si href de enlace es igual #

Saludos

G.

3

En algunos navegadores Identificación podrían estar vacío y jQuery se ahoga con "#" como un selector.

+0

Por cierto, no estoy seguro de las condiciones que causan el error real, pero me encontré con el mismo problema con el complemento jqGrid. El código del complemento parecía hacer que jquery se ahogara en casi todos lados cuando no había una identificación en el componente convertido en jqGrid. Resolví el problema asignando un selector aleatorio al elemento. table.attr ("id", "tabla" + Math.floor (Math.random() * 100000)); – Shanimal

0

El problema para mí parecía deberse a tener demasiadas # en el selector.

Por ejemplo:

$('##id_name') 
debería haber sido

...

$('#id_name') 
Cuestiones relacionadas