web-dev-qa-db-fra.com

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

j'ai un txtBox et son identifiant est: beginDateTxt

mais jsf fait j_idt8:beginDateTxt

en jquery j'essaye 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 j'obtiens en dessous de l'erreur:

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

pourquoi?

32
user2294016

Tu pourrais 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, le : Désigne une pseudo-classe. Cependant, dans votre cas, le : N'est qu'une partie de l'identifiant.

Si vous utilisez la fonction générique getElementById(), l'argument est pas décomposé, mais vu comme un ID tout à fait. Ainsi, en utilisant getElementById() et en enveloppant le résultat avec $(), vous pouvez contourner ce "malentendu".

En général, cependant, je pense qu'il serait préférable de changer le schéma d'espacement 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! "# $% & '() * +,./:; <=>? @ [] ^` {|} ~) Comme 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 reste cependant valable.

$("#j_idt8\\:beginDateTxt").mobiscroll().date({theme: 'Android-ics light', mode:'scroller', display: 'bottom'});
62
Sirko

Si vous souhaitez utiliser le sélecteur d'ID jQuery, vous devez échapper au : avec \ puis pour échapper au \ (double échappement)

Ici:

$(function() {
    $("#j_idt8\\:beginDateTxt").mobiscroll().date({
        theme: 'Android-ics light',
        mode:'scroller', display: 'bottom'
    });
});
31
Daniel