2013-06-18 40 views
7

在輸入內容中輸入內容並點擊按鈕後,「.val()」返回一個空值,爲什麼?jQuery.val()在<input>標記上不起作用

HTML代碼:

<div class="mainClass"> 
    <div class="class1" > 
     <div class="class2"> 
     <h3>Settings 1</h3> 
     <label> 
      <span>Text 1:</span> 
      <input type="text" name="text"> 
     </label> 
     <label> 
      <span>Text 2:</span> 
      <input type="text" name="text2"> 
     </label> 
     </div> 
    </div> 

    <div class="class3" > 
     <div class="class4"> 
     <h3>Settings 2</h3> 
     <label> 
      <span>Text 1:</span> 
      <input type="text" name="text"> 
     </label> 
     <label> 
      <span>Text 2:</span> 
      <input type="text" name="text2"> 
     </label> 
     </div> 
    </div> 
</div> 
<button id="Go" class="go" >GO </button> 

JavaScript代碼:

$('#Go').on('click', function() { 
    alert($('.class1 input').val()); //return an empty value 
    $('.class1 input').val("test"); 
    alert($('.class1 input').val()); //return test 
}); 

編輯:

即使這並不工作,這裏我只是一個輸入,所以我不能鍵入錯誤的:

<div class="mainClass"> 
    <div class="class1" > 
     <div class="class2"> 
     <h3>Settings 1</h3> 
     <label> 
      <span>Text 1:</span> 
      <input type="text" name="text"> 
     </label>   
     </div> 
    </div> 
</div> 
<button id="Go" class="go" >GO </button> 

編輯2:我發現這個問題的一個開始......

當我這樣做:

$('.class1 input').each(function() { 
    alert($(this).attr('name') + " value:" +$(this).val()); 
}); 

我得到兩個「警告」是這樣的:

text value: 
text value:myinputText  

於是兩個創建在我的HTML中,第一個是空的,第二個很好用! 仔細看我的網頁,我發現所有元素都是重複的(<select,field, input...

任何想法怎麼可能?我打電話兩次我的HTML文件? 我所有的代碼是在一個彈出(我不知道它是否能夠幫助) (我在Javascript和jQuery新)

感謝

+0

''不是標籤.. –

+0

@dystroy爲什麼不應該這樣呢?我很確定這是完全有效的,並接受這樣做 – Ian

+0

@dystroy這裏有一個參考:http://stackoverflow.com/questions/774054/should-i-put-input-tag-inside-label-tag – Ian

回答

11

有一個以上的元件匹配'.class1 input'的。你可能沒有填寫第一個。

the documentation

獲取該組匹配 元件的第一元件的電流值。

雖然val('text')填滿所有匹配的元素:

設置每個元素的值在匹配的元素集合

的這就是爲什麼你看到你的第二個警告的東西。

你最好使用更具選擇性的選擇器。通常我們使用一個id或一個名字,如果一個表單被用來將值發送到服務器。

+0

看到我的編輯.... – durje

+0

你能在一個小提琴語法正確的代碼重現問題了嗎? –

+0

不,這是在小提琴做工精細! – durje

1

您有多個匹配的元素。

jQuery docs

.val()

獲取第一元件的當前值的集合中的 匹配元素或設置每個匹配的元素的值。

您只獲取匹配集的第一個元素作爲文檔狀態。如果你想要所有的值,你需要遍歷整個集合。

+0

看到我的編輯.... – durje

+2

當我評論提醒下你的車線工作正常,我:http://jsfiddle.net/ XqHzT/ – epascarello

+0

亞我看到了,我不知道爲什麼它不適用於我,但感謝您的幫助。 – durje

3
$('.class1 input').val() 

指兩個元件

<input type="text" name="text"> 

<input type="text" name="text2"> 
+0

看到我的編輯.... – durje

0

纏繞在文檔準備塊jQuery代碼:

$('document').ready(function(){}); 

,比如s o:

$('document').ready(function(){ 
    $('#Go').on('click', function() { 
     alert($('.class1 input').val()); //return an empty value 
     $('.class1 input').val("test"); 
     alert($('.class1 input').val()); //return test 
    }); 
}); 

即使有谷歌搜索和Stackoverflow的幫助,我們花了1個小時才找出這個問題。