2013-04-18 22 views
27

ho un txtBox e la sua identificazione è: beginDateTxterrore non rilevato: Errore di sintassi, espressione riconosciuto: pseudo supportato:

ma jsf rende j_idt8:beginDateTxt

in jquery provo a raggiungere così

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

      }); 
    </script> 

ma ottengo sotto l'errore:

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

perché?

risposta

54

Si potrebbe provare

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

In generale jQuery utilizza qualcosa come selettori CSS nella sua funzione $(). In un selettore CSS lo : denota una pseudo-classe. Tuttavia, nel tuo caso lo : è solo una parte dell'ID.

Se si utilizza il getElementById() generico, l'argomento è non decomposto, ma visto come un ID del tutto. Quindi, utilizzando getElementById() e avvolgendo il risultato con $() è possibile aggirare questo "malinteso".

In generale, tuttavia, penso che sarebbe meglio cambiare lo schema dei nomi nello JSF.

EDIT

Le jQuery documentation on selectors stati che si dovrebbe sfuggire caratteri speciali con l'uso di \\:

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

questo porterà alla risposta già data da Daniel, che a mio parere è superiore alla risposta di cui sopra. La spiegazione, tuttavia, rimane valida.

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

si tratta esattamente! thx – user2294016

+1

Ho pensato che stiamo usando il selettore jQuery per non utilizzare getElementById – AaA

+2

@BobSort Il problema era che l'id includeva un ':', il che faceva pensare a jQuery che venisse usata una pseudo classe e nel risultato fallire. Per aggirare ho usato 'getElementById()', che interpreta il suo argomento come una stringa. – Sirko

26

Se si desidera utilizzare jQuery selettore id è necessario sfuggire alla : con \ e quindi per sfuggire alla \ (doppia fuga)

Qui:

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