2011-12-18 80 views
1

我想讀在我的HTML表單的一個文本框中輸入的值,這個我試過jQuery的val()方法,但它不能正常工作,任何想法,爲什麼?jQuery的VAL()方法不工作

HTML:

<form method="POST" id="payment-form"> 
    <p> 
     <label class="card-number" for="txt_cardno"><span>Card Number:</span></label> 
     <input type="text" size="20" autocomplete="off" class="card-number" id="txt_cardno" name="cardno" /> 
    </p> 
    <p class="submit submit-button"><a class="btn" href="#">Charge Card</a><br><a class="btn" href="#" onClick="return false">Go Back</a></p> 
    <div class="clear"></div> 
</form> 

的Javascript:

$(document).ready(function() { 
    $(".submit").live("click", function(e) { 
     e.preventDefault(); 
     var card_num = $('.card-number').val(); 
     alert(card_num); 
    }); 
}); 

中的jsfiddle是http://jsfiddle.net/74neK/1/

+2

值得指出指出你使用jQuery 1.7.1(在你的鏈接JS小提琴),在這種情況下,['活()'](http://api.jquery.com/live/)已被棄用。改用['on()'](http://api.jquery.com/on/)。 – 2011-12-18 21:01:30

+0

感謝@DavidThomas將使用() – user993563 2011-12-18 21:28:02

回答

6

使用ID訪問它(更快):

var card_num = $('#txt_cardno').val(); 
+0

你已經擊中了現場:) – user993563 2011-12-18 21:38:40

4

你給雙方<label><input>"card-number"類。

指定在選擇器的input。否則.val()讓你找到(在label)的第一個元素的值。

var card_num = $('input.card-number').val(); 

http://jsfiddle.net/74neK/3/


如果你真的關心微的優化,你應該使用本地方法:

var card_num = (document.getElementById('txt_cardno')||{}).value; 

http://jsfiddle.net/74neK/5/

+0

但爲什麼我需要添加額外的輸入。 ? – user993563 2011-12-18 21:00:35

+1

@ user993563:我剛更新了我的答案和更多信息。當jQuery找到多個元素時,'.val()'會嘗試給你找到的第一個元素的值。在這種情況下,'label'是第一個,所以你沒有得到任何值*(因爲標籤沒有值)*。 – RightSaidFred 2011-12-18 21:01:48

+1

thnaks的解釋,確實有幫助! – user993563 2011-12-18 21:37:58

3

<label>class相同的<input>的,所以jQuery是嘗試和失敗檢索您<label>的價值。取而代之的是,請參閱您的<input>通過nameid

$('#txt_cardno').val() 

我會建議ID不管,因爲jQuery它優化到document.getElementById,這是要快得多。