2013-04-18 10 views
27

Mam txtBox i jego id to: beginDateTxtUncaught Error: Błąd składni, nierozpoznany wyrażenie: nieobsługiwane pseudo:

ale JSF czyni j_idt8:beginDateTxt

w jquery próbuję dotrzeć tak

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

      }); 
    </script> 

ale otrzymuję poniżej błędu:

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

dlaczego?

Odpowiedz

54

można spróbować

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

W ogólnym jQuery używa czegoś podobnego selektorów CSS w swoim $() funkcji. W selektorze CSS : oznacza pseudoklasę. Jednak w twoim przypadku : jest tylko częścią identyfikatora.

Jeśli używasz generycznego getElementById(), argumentem jest , a nie, rozłożony, ale widziany jako ID. Więc używając getElementById() i zawijając wynik z $() możesz ominąć to "nieporozumienie".

Ogólnie jednak, myślę, że lepiej byłoby zmienić schemat oznaczania przestrzeni w twoim JSF.

EDIT

W jQuery documentation on selectors stwierdza, że ​​powinna uciec znaków specjalnych przez użycie \\:

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") .

doprowadzi to do odpowiedzi już podany przez Daniela, który moim zdaniem jest lepszy do odpowiedzi podanej powyżej. Wyjaśnienie pozostaje jednak aktualne.

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

dokładnie jest! thx – user2294016

+1

Myślałem, że używamy selektora jQuery, więc nie używamy getElementById – AaA

+2

@BobSort Problem polegał na tym, że id zawierał ':', co powodowało, że jQuery uważał, że pseudo klasa jest używana, aw rezultacie nie. Aby ominąć, użyłem 'getElementById()', który interpretuje swój argument jako łańcuch. – Sirko

26

Jeśli chcesz użyć selektora id jQuery trzeba uciec : z \ a następnie uciec z \ (podwójne escape)

tutaj:

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