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?
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'});
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'
});
});