2009-11-21 8 views
8

Je reçois cette erreur sur un événement .click() dans jQuery. Je le vois dans Firebug. J'utilise la dernière version, 1.3.2 (min) Le clic déclenche une requête $ .ajax() pour un formulaire sur mon site web. J'ai demandé à Google à ce sujet et tout ce qu'il sait est "%" ou "[@]" comme des expressions non reconnues, rien sur le "#".exception non interceptée: erreur de syntaxe, expression non reconnue: #

ici est un peu de mon code:

$("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 cette façon, je vérifie toutes mes entrées pour les erreurs, puis appelez formErrorHandling() qui fait un peu de montrer/cacher, des trucs comme ça, rien d'important. J'ai lu que cela pourrait être d'un de mes sélecteurs, mais ils semblent tous être très bien.

Quelqu'un d'autre a eu le même problème?

Merci.

+0

Y at-il une raison que vous imbriquez '# ids' dans vos sélecteurs? Un identifiant d'élément doit être unique sur la page, donc les imbriquer ou les spécifier avec 'form' ou' input' semble un peu étrange. –

+2

Qu'est-ce que je veux dire est, pourquoi utiliser 'formulaire # buyForm # submitForm' quand vous pouvez simplement dire' # submitForm' etc –

+1

dcneiner, oui, id doit être et sont uniques. La raison pour laquelle j'utilise le nom du tag avant le sélecteur, au moins d'après ce que j'ai lu, c'est la vitesse. Donc, jQuery utilise le getElementByTagName et sait exactement quoi chercher, au lieu de regarder tous les identifiants de ma page. – Adrian

Répondre

8

D'après ce que je peux voir l'exception semble être en quelque sorte déclenché par le plug-in jScrollPane que vous utilisez. Essayez de remplacer le script que vous avez inclus (v1.2.3 qui date de décembre 2008) par une version plus récente directement à partir du tronc. Qui comprend de nombreuses améliorations par rapport à v.1.2.3 et fixe l'exception pour moi jScrollPane.js (jScrollPane.min.js la version minified de R87 JScrollPane minified avec YUICompressor)


enlevé vieux trucs de réponse ne sont plus nécessaires

+0

jitter, je ne sais pas où l'exception se produit, fait intéressant est que cela se produit uniquement avec un de mes formulaires (j'ai deux formes sur mon site, utilisant la même fonction formErrorHandling() et suivant le même modèle de code) posté le JS contenant cette partie de la gestion de formulaire ici: http://artdevmedia.net/gds/test.js note: la fonction principale qui comprend les formulaires liés est appelée après une requête ajax succès. – Adrian

+0

vérifier réponse élargie: en particulier la partie sur '$ (" # "+ id)' et 'elements: textarea' – jitter

+0

Salut jitter merci pour votre temps. J'ai testé encore et encore et je pense que l'erreur pourrait ne pas être causée par mes formulaires ou par la fonction de gestion des erreurs. C'est un. Deuxièmement, cela n'arrive pas tout le temps. De toute façon, si vous avez le temps, jetez un oeil ici: artdevmedia.net/gds - voici ce que j'ai trouvé: Si vous cliquez sur "ACHETER ALBUM" et que vous continuez avec le formulaire en cours, etc, il n'y a aucune exception.Maintenant, cliquez sur "VIDEO" puis cliquez sur X pour fermer la vidéo. Parfois, c'est le moment où l'exception jette, d'autres fois, l'exception jette après la fermeture de la vidéo et revient au formulaire BUY ALBUM et le soumet – Adrian

0

à quoi ressemble la fonction formErrorHandling? Attend-il un sélecteur ou un objet jQuery?

peut-être ce que vous avez besoin est d'appeler comme

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

Salut Victor, la fonction formErrorHandling ressemble à ceci: function formErrorHandling (id, filter) {id = id.replace ("#", ""); ...} après, je fais un switch (id) et montre ensuite la bonne erreur de message pour cet id. (et s'il y a un filtre, affichez un message spécifique) – Adrian

+0

Adrian, Si vous supprimez le "#", pourquoi vous ennuyez-vous quand vous exécutez la fonction? –

+0

Eh bien, vous avez raison, je pourrais juste appeler formErroHandling ("userLastName") sans #, et ne pas l'enlever dans la fonction. Je l'ai laissé là, pour un meilleur suivi de mon code. Au moins, pour moi, cela aide. – Adrian

1

septembre 2011

changé de

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

à

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

et durci qui auto même uncaught exception: Syntax error, unrecognized expression: # un message

0

Je sais qu'il est un vieux problème et il y a une version plus récente JScrollPane mais comme je avais besoin d'utiliser un courant pour cause d'un problèmes hérités du passé est là le correctif.Si vous utilisez jScrollPane.js de la réponse ci-dessus, vous devez modifier le code en ligne 534:

changement:

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

à

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

morceau entier du code responsable des clics de documents avec le correctif:

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

Fondamentalement, lefonctionsera ignorée si le lien de href est égal à #

Vive

G.

3

Dans certains id navigateurs pourraient être vides et JQuery selfs sur « # » comme un sélecteur.

+0

btw, je ne suis pas sûr que les conditions causent l'erreur réelle, mais je courais dans le même problème avec le plugin jqGrid. Le code du plugin semblait provoquer des étranglements à jquery à peu près partout où il n'y avait pas d'identifiant dans le composant transformé en jqGrid. J'ai résolu le problème en affectant un sélecteur aléatoire à l'élément. Table.attr ("id", "table" + Math.floor (Math.random() * 100000)); – Shanimal

0

Le problème pour moi a semblé être provoqué en ayant un # trop dans le sélecteur.

Par exemple:

$('##id_name') 

aurait dû ...

$('#id_name') 
Questions connexes