2015-04-24 18 views
6

Ho il seguente codice, dove sto selezionando tutti gli elementi corrispondenti che iniziano con lo stesso nome, escludendo uno che non voglio includere nel gruppo.TypeError: .val non è una funzione

var myInputBoxes= $('input[id ^= "SubjectText"]').not('#SubjectTextNew'); 
for (i = 0 ; i < myInputBoxes.length; i++){ 
    var SubjectId = myInputBoxes[i].id.replace('SubjectText', ''); 
    var Subject = myInputBoxes[i].val(); 
} 

questo mi dà il seguente errore in Firefox

TypeError: myInputBoxes[i].val is not a function

Perché fallirebbe sulla funzione val?

risposta

22

L'accesso a un oggetto jQuery mediante notazione parentesi restituisce un DOMElement che non ha la funzione val(). Se si desidera recuperare un elemento dal suo indice all'interno di un unico set è necessario utilizzare eq():

var Subject = myInputBoxes.eq(i).val(); 

In alternativa è possibile mantenere il DOMElement e utilizzare la proprietà value:

var Subject = myInputBoxes[i].value; 
+0

Puoi anche convertire 'DOMElement' in' oggetto jQuery' così $ '(subjectBoxes [i]). Val();' –

+0

Mentre funzionerebbe, che senso ha prendere un oggetto jQuery, ottenendo un DOMElement da esso, quindi riconvertirlo in un oggetto jQuery? –

+0

Per curiosità, posso modificare la mia query per restituire oggetti jQuery? (ed essere in grado di interrogare solo su un ID parziale?) –

1

Perché subjectBoxes[i] non è un oggetto jQuery, se si tratta di un oggetto jQuery, è possibile utilizzare .eq() per ottenere un riferimento wrapper jQuery all'elemento all'indice passato

var myInputBoxes = $('input[id ^= "SubjectText"]').not('#SubjectTextNew'); 
myInputBoxes.each(function (e, el) { 
    var SubjectId = this.id.replace('SubjectText', ''); 
    var Subject = subjectBoxes.eq(i).val(); 
}) 
Problemi correlati