2009-11-21 32 views
8

Viene visualizzato questo errore su un evento .click() in jQuery. Lo vedo in Firebug. Uso la versione più recente, 1.3.2 (min) Il clic genera una richiesta $ .ajax() per un modulo nel mio sito web. Ho chiesto a Google di questo e tutto ciò che sa è "%" o "[@]" come espressioni non riconosciute, nulla sul "#".eccezione non rilevata: errore di sintassi, espressione non riconosciuta: #

qui è un po 'del mio codice:

$("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; 
    }); 

In questo modo posso controllare tutti i miei ingressi per gli errori, e quindi chiamare formErrorHandling(), che fa un po' Mostra/Nascondi, cose del genere, niente di importante.

Ho letto che potrebbe provenire da un mio selezionatore, ma sembra che stiano tutti bene.

Qualcun altro ha avuto lo stesso problema?

Grazie.

+0

c'è un motivo che si sta nidificazione '# ids' nei tuoi selettori? Un id di elemento dovrebbe essere univoco nella pagina, quindi annidarli o specificarli con 'form' o' input' sembra un po 'strano. –

+2

Ciò che intendo è, perché usare 'form # buyForm # submitForm' quando puoi semplicemente dire' # submitForm' ecc. –

+1

dcneiner, sì, l'id dovrebbe essere e sono unici. Il motivo per cui utilizzo il nome del tag prima del selettore, almeno da quello che ho letto, è la velocità. Quindi jQuery usa getElementByTagName e sa esattamente cosa cercare, invece di guardare tutti gli ID dalla mia pagina. – Adrian

risposta

8

Da quello che posso vedere l'eccezione sembra essere in qualche modo innescato dal plugin jScrollPane che si sta utilizzando.

Provare a sostituire lo script che si include (v1.2.3 che è vecchio come da dicembre 2008) con una versione più recente direttamente dal trunk. Che include molti miglioramenti rispetto v.1.2.3 e fissa l'eccezione per me jScrollPane.js (jScrollPane.min.js versione minified di R87 JScrollPane minified con YUICompressor)


rimosso roba vecchia risposta non è più necessario

+0

jitter, non so dove si verifichi l'eccezione, il fatto interessante è che questo accade solo con uno dei miei moduli (ho due moduli sul mio sito web, entrambi usano la stessa funzione formErrorHandling() e seguendo lo stesso schema di codice) I postato il JS che contiene questa parte della gestione dei moduli qui: http://artdevmedia.net/gds/test.js nota: la funzione principale che include i relativi moduli viene chiamata dopo una richiesta di una richiesta ajax. – Adrian

+0

verifica la risposta estesa: in particolare la parte su '$ (" # "+ id)' e 'elements: textarea' – jitter

+0

Ciao jitter grazie per il tuo tempo. Ho testato più e più volte e penso che l'errore potrebbe non essere causato dalle mie forme o dalla funzione di gestione degli errori. Quello è uno. Due, non succede tutto il tempo. Ad ogni modo, se hai tempo, dai un'occhiata qui: artdevmedia.net/gds - ecco cosa ho trovato: se fai clic su "ACQUISTA ALBUM" e poi prosegui con il modulo che termina, ecc, non fa eccezione.Ora, fare clic su "VIDEO" e quindi fare clic su X per chiudere il video. A volte questo è il momento in cui getta l'eccezione, altre volte, l'eccezione si getta dopo aver chiuso il video e tornare al modulo BUY ALBUM e inviarlo – Adrian

0

come si presenta la funzione formErrorHandling? Si aspetta un selettore o un oggetto jQuery?

forse ciò che è necessario è quello di chiamarlo come

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

ciao Victor, la funzione formErrorHandling ha il seguente aspetto: function formErrorHandling (id, filter) {id = id.replace ("#", ""); ...} dopo faccio un interruttore (id) e poi mostro il giusto errore di messaggio per quell'id. (e se ha un filtro, mostra un messaggio specifico) – Adrian

+0

Adrian, Se stai rimuovendo il "#", perché ti preoccupi di impostarlo quando esegui la funzione? –

+0

Beh, hai ragione, potrei semplicemente chiamare formErroHandling ("userLastName") senza #, e non rimuoverlo in funzione. L'ho lasciato lì, per un migliore monitoraggio del mio codice. Almeno, per me, questo aiuta. – Adrian

1

settembre 2011

cambiato da

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

a

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

e curato che l'auto stessa uncaught exception: Syntax error, unrecognized expression: # messaggio

0

Lo so che è un vecchio problema e non c'è nuova versione JScrollPane ma come ho bisogno di usare una corrente a causa di un problemi legacy ecco la correzione.Se userete jScrollPane.js dalla risposta di cui sopra è necessario modificare il codice in linea 534:

cambiamento:

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

a

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

intero pezzo di codice responsabile per i clic di documenti con la correzione:

$(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); 
     } 
    } 
}); 

Fondamentalmente il scrollTo funzione sarà ignorata se del href collegamento uguale #

Acclamazioni

G.

3

in alcuni browser id potrebbe essere vuota e JQuery soffoca su "#" come selettore.

+0

btw, non sono sicuro di quali condizioni causino l'errore effettivo, ma stavo correndo lo stesso problema con il plugin jqGrid. Sembrava che il codice del plugin causasse il jquery a soffocare praticamente ovunque quando non c'era id nel componente trasformato in jqGrid. Ho risolto il problema assegnando un selettore casuale all'elemento. table.attr ("id", "table" + Math.floor (Math.random() * 100000)); – Shanimal

0

Il problema per me sembrava essere causato dall'avere troppi # nel selettore.

Ad esempio:

$('##id_name') 

avrebbe dovuto essere ...

$('#id_name') 
Problemi correlati