2013-04-18 21 views
27

ich habe ein txtBox und seine ID ist: beginDateTxtnicht erfasste Fehler: Syntaxfehler, unerkannt Ausdruck: nicht unterstützte pseudo:

aber JSF macht es j_idt8:beginDateTxt

in jquery ich versuche, es zu erreichen wie die

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

      }); 
    </script> 

aber ich bekomme unter Fehler:

Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: beginDateTxt

warum?

Antwort

54

könnten Sie

versuchen so etwas wie CSS-Selektoren in seiner Funktion $()
$(document.getElementById('j_idt8:beginDateTxt')).mobiscroll().date({theme: 'android-ics light', mode:'scroller', display: 'bottom'}); 

Allgemein jQuery verwendet. In einem CSS-Selektor bezeichnet : eine Pseudo-Klasse. In Ihrem Fall ist die : nur ein Teil der ID.

Wenn Sie das generische getElementById() verwenden, ist das Argument nicht zerlegt, aber als eine ID insgesamt gesehen. Indem Sie also getElementById() verwenden und das Ergebnis mit $() umhüllen, können Sie dieses "Missverständnis" umgehen.

Im Allgemeinen, aber ich denke, es wäre besser, das Namespacing-Schema in Ihrem JSF zu ändern.

EDIT

Die jQuery documentation on selectors besagt, dass Sie durch die Verwendung von \\ Sonderzeichen entkommen sollte:

To use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][]^`{|}~) as a literal part of a name, it must be escaped with with two backslashes: \. For example, an element with id="foo.bar" , can use the selector $("#foo\\.bar") .

Dieses bereits von Daniel gegeben, um die Antwort führt, die meiner Meinung nach in überlegen ist zu der Antwort oben gegeben. Die Erklärung bleibt jedoch gültig.

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

genau ist es! thx – user2294016

+1

Ich dachte, wir verwenden jQuery Selektor, so dass wir nicht getElementById verwenden – AaA

+2

@BobSort Das Problem hier war, dass die ID enthalten ein ':', was jQuery denken, eine Pseudo-Klasse verwendet wird und im Ergebnis fehlschlagen. Um zu umgehen, habe ich 'getElementById()' verwendet, das sein Argument nur als String interpretiert. – Sirko

26

Wenn Sie möchten, dass Sie jQuery-ID-Selektor verwenden müssen die : mit \ und dann die \ (doppelte Escape)

Hier entweichen zu entkommen:

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