2013-07-03 19 views
10

Ho una funzione Ajax che ottiene alcuni valori in base al valore selezionato in un menu a discesa. Sto cercando di abilitare/disabilitare alcuni campi basati su una sottostringa. Ho trovato 'contiene' a lavorare in Firefox, ma provare a Chrome e Safari mi dice che l'oggetto 'non ha un metodo contiene'jQuery: contains() funziona in Firefox ma non in Chrome/Safari

if ($d.attr("embed").contains('$var_2$')) { 
    //do something 
} else { 
    // do something else 
} 

Esiste un'alternativa alla contiene che funzionerà in tutti i browser?

risposta

18

quello che si sta utilizzando non c'è String.contains, non jQuery.contains. questo perché stai utilizzando la funzione sul valore di ritorno .attr s, che è una stringa, non un oggetto jQuery.

utilizzare jQuery.contains() (goduto funziona cross-browser), si potrebbe fare questo, invece:

$d.contains('$var_2$') 

ma notare che questo non cercherà solo nel l'attributo specificato, ma l'intero elemento, invece.

così quello che molto probabilmente vuole fare è usare String.indexOf() (wich anche funziona cross-browser):

$d.attr("embed").indexOf('$var_2$') != -1 
+0

Grazie per la spiegazione approfondita, che ha funzionato! Avevo visto indexOf come alternativa e l'ho provato, ma la mia sintassi doveva essere stata disattivata perché non ottenevo i risultati desiderati. Funziona perfettamente con la tua sintassi data. Grazie ancora. – richj

+0

prego. – oezi

+0

Solo un aggiornamento di questa risposta: gli sviluppatori di Mozilla hanno deciso di rinominare tale metodo in "include" in Firefox 48 per ES 6 e motivi di compatibilità. – beendr

3

È possibile utilizzare indexOf, dovrebbe funzionare in tutti i browser.

if ($d.attr("embed").indexOf('$var_2$') > -1) { 
    //do something 
} else { 
    // do something else 
} 
Problemi correlati