Erreur non interceptée: erreur de syntaxe, expression non reconnue: pseudo non pris en charge: [dupliquer]

Cette question a déjà une réponse ici:

J'ai un txtBox et son id est: beginDateTxt

Mais jsf le fait j_idt8:beginDateTxt

En jquery j'essaie de l'atteindre comme ça

  <script type="text/javascript">
            $(document).ready(function() {
                $(function() {
                    $("#j_idt8:beginDateTxt").mobiscroll().date({
                       theme: 'android-ics light', mode:'scroller', display: 'bottom'
                    });
                });

            });
   </script>

Mais je reçois une erreur ci-dessous:

Erreur non interceptée: erreur de syntaxe, non reconnue expression: pseudo non pris en charge: beginDateTxt

Pourquoi?

29
demandé sur NoobEditor 2013-04-18 11:46:57

2 réponses

Vous pouvez essayer

$(document.getElementById('j_idt8:beginDateTxt')).mobiscroll().date({theme: 'android-ics light', mode:'scroller', display: 'bottom'});

En général, jQuery utilise quelque chose comme des sélecteurs CSS dans sa fonction $(). Dans un sélecteur CSS, : désigne une pseudo-classe. Cependant, dans votre cas, le : n'est qu'une partie de l'id.

Si vous utilisez le générique getElementById(), l'argument est pas décomposé, mais vu comme un IDENTIFIANT complètement. Donc, en utilisant getElementById() et en enveloppant le résultat avec $(), Vous pouvez contourner ce "malentendu".

En général, cependant, je pense que ce serait mieux vaut changer le schéma d'espace de noms dans votre JSF.

Modifier

La documentation jquery sur les sélecteurs indique que vous devez échapper les caractères spéciaux en utilisant \\:

Pour utiliser l'un des méta-caractères ( tels que !"#$%&'()*+,./:;?@[]^`{|}~ ) en tant que partie littérale d'un nom, il doit être échappé avec deux barres obliques inverses:\. Par exemple, un élément avec id="foo.bar", peut utiliser le sélecteur $("#foo\\.bar").

Cela conduira à la réponse déjà donnée par Daniel, qui, à mon avis, est supérieure à la réponse donnée ci-dessus. L'explication, cependant, reste valable.

$("#j_idt8\\:beginDateTxt").mobiscroll().date({theme: 'android-ics light', mode:'scroller', display: 'bottom'});
57
répondu Sirko 2015-02-19 14:00:55

Si vous voulez utiliser le sélecteur d'id jQuery, vous devez échapper le : avec \, puis échapper au \ (double escape)

Ici:

$(function() {
    $("#j_idt8\\:beginDateTxt").mobiscroll().date({
        theme: 'android-ics light',
        mode:'scroller', display: 'bottom'
    });
});
28
répondu Daniel 2015-11-24 08:10:36