जावास्क्रिप्ट नाम से तत्व मिलता है


127

इस समारोह पर विचार करें:

function validate()
{
  var acc = document.getElementsByName('acc').value;
  var pass = document.getElementsByName('pass').value;

  alert (acc);
}

और यह HTML हिस्सा:

<table border="0" cellpadding="2" cellspacing="0" valign="top">
    <tr>
        <td class="td1">Account</td>
        <td class="td2"><input type="text" name="acc" /></td>
    </tr>
    <tr class="td1">
        <td>Password</td>
        <td class="td2"><input type="password" name="pass" /></td>
    </tr>
</table>
<div><button onClick="validate()" class="cupid-greenx">Login now</button></div>

चेतावनी बॉक्स दिखाई दे रहा है, लेकिन यह "अपरिभाषित" दिखाता है।


यदि आप इसे पूरी तरह से बदल सकते हैं, तो मैं आपके दो इनपुट फ़ील्ड में एक फ़ील्ड "आईडी" जोड़ने की सलाह दूंगा, और उपयोग करें document.getElementById, जो बिल्कुल एक मूल्य देता है।
ओडी

4
अभी भी बेहतर है: var inputs = document.getElementsByTagName('input')एक नोडेलिस्ट लौटाता है, जिसमें से आप दोनों तत्वों को निकाल सकते हैं जैसे: var pass = inputs.item ('पास')। बस एक टिप, यह चीजों को गति दे सकता है यदि आप एक बड़े डोम के साथ काम कर रहे हैं, जैसा getElementByIdकि हर बार पूरे पेड़ की खोज करेंगे, जबकि एक नोडेलिस्ट नहीं होगा, इसलिए यह तेज है ...
एलियास वान ओओटगेम

लिटिल प्यारा कोड वास्तव में एक्सडी
गुइलेर्मो गुटिरेज

जवाबों:


246

कारण यह है कि त्रुटि आप देख रहे हैं क्योंकि तत्वों का document.getElementsByNameएक रिटर्न है NodeList। और NodeListतत्वों में से एक .valueसंपत्ति नहीं है ।

इसके बजाय इसका उपयोग करें:

document.getElementsByName("acc")[0].value

30

इस विधि में बहुवचन पर ध्यान दें:

document.getElementsByName()

यह तत्वों की एक सरणी देता है, इसलिए पहली घटना को प्राप्त करने के लिए [0] का उपयोग करें, जैसे

document.getElementsByName()[0]

8
यह एक सरणी नहीं है, यह एक
नोडलिस्ट है

1
@FlorianMargaine - असल में यह HTMLCollection ;)
j08691

1
@ j08691 nope :) लेकिन यह भ्रमित होना आसान हो सकता है: पी
फ्लोरियन मार्गाइन

एक सरणी की परिभाषा क्या है और यह कैसे अलग है? NodeList केवल कुछ सुविधा विधियों के साथ HTMLElements की एक सरणी के चारों ओर लिपटी हुई वस्तु है। वैसे भी, ओपी के लिए आम आदमी की शर्तों में इसे रखने के लिए, मैंने एक सरणी कहा।
ओजेजी

1
एक सरणी में एक नोडलिस्ट की तुलना में बहुत अधिक विधियां हैं। एक NodeList जैसे सरणियों से कुछ तरीकों / गुण लेता lengthसंपत्ति, लेकिन यह भी याद आ रही है एक बहुत जैसे तरीकों का map, forEachआदि कौन बताता है कि क्यों हम उपयोग करने की जरूरत है: Array.prototype.forEach.call( NodeList, fn )
फ्लोरियन मार्गाइन

11

आप यह चाहते हैं:

function validate() {
    var acc = document.getElementsByName('acc')[0].value;
    var pass = document.getElementsByName('pass')[0].value;

    alert (acc);
}

आपके उत्तर में ओपी के उदाहरण का उपयोग करने के लिए धन्यवाद।
क्रिश बॉयड

@ क्रिसबॉड, अंतर यह है कि मैं सरणी से पहला तत्व वापस कर रहा हूं getElementsByName। हो सकता है कि मुझे और अधिक स्पष्ट करना चाहिए - यदि आप चाहें तो संपादित करने के लिए स्वतंत्र महसूस करें।
इलियट बोनेविले

मैं आपको एक पूरक दे रहा था :) कोई भी उच्चतर उत्तर ओपी
क्रिस बॉयड

6

विधि document.getElementsByName तत्वों की एक सरणी देता है। आपको उदाहरण के लिए पहले का चयन करना चाहिए।

document.getElementsByName('acc')[0].value

4
यह एक सरणी नहीं है, यह एक
नोडलिस्ट है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.