2011-05-13 86 views
2

我在jQuery和PHP中使用Ajax。爲什麼我得到undefined是/否單選按鈕

當用戶提交部分多部分表單時,結果顯示在一個新的div中。表單中有幾個是/否單選按鈕。但是,結果中不是顯示「是」或「否」,而是顯示「未定義」。任何想法,我在做什麼錯在這裏?

HTML

<div class="usedYesNo"> 
    <h5>Question 1</h5> 
    <ul class="YesNo"> 
    <li> 
     <input class="option-child" type="radio" name="YesNo1[]" value="Yes" > 
     <label for="Yes">Yes</label> 
    </li> 
    <li> 
     <input class="option-child" type="radio" name="YesNo1[]" value="No" > 
     <label for="No">No</label> 
    </li> 
</ul> 
</div> 
<div class="usedYesNo"> 
    <h5>Question 2</h5> 
    <ul class="YesNo"> 
    <li> 
     <input class="option-child" type="radio" name="YesNo2[]" value="Yes" > 
     <label for="Yes">Yes</label> 
    </li> 
    <li> 
     <input class="option-child" type="radio" name="YesNo2[]" value="No" > 
     <label for="No">No</label> 
    </li> 
</ul> 
</div> 

jQuery的

$(form).ajaxSubmit({ 

    type: "POST", 
    data: { 

     YesNo1 : $('YesNo1').val(), 
     YesNo2 : $('YesNo2').val() 

     }, 
    dataType: 'json', 
    url: './includes/ajaxtest3.php', 
    error: function() {alert("error!");},     
    success: $('#output2').html(data.message.join('<br />')); 
//... 

PHP

$return['message'] = array(); 
$return['message'][] = 'Answer to first question: ' . $_POST['YesNo1']; 
$return['message'][] = 'Answer to second question: ' . $_POST['YesNo2']; 
    echo json_encode($return); 
+0

我有點困惑;肯問了這個問題,但是下面這個讓人惋惜的人是麥克雷爾姆。我問,因爲麥克格雷姆的評論,我很想冷靜地回答這個問題,但我不想懲罰肯。 :P – Andrew 2011-05-13 17:51:48

+0

@Andrew那麼你的意思是說你想對我的評論下降?因爲你不認爲他們是好評? – mcgrailm 2011-05-13 18:15:57

+0

他們不是,不是,尤其是那個你說別人錯了的人,那麼你給的鏈接就證明他們是對的。提供單選按鈕ID是一種110%的有效方法。你的方法也是有效的,但是這並不會使其他方法不那麼有效。 – Andrew 2011-05-13 19:13:34

回答

0

您沒有使用y中的正確選擇我們對jQuery的調用。

+0

這是真的,但你應該顯示什麼是正確的選擇器應該是 – mcgrailm 2011-05-13 17:43:37

3

你需要#獲得由ID元素包裹在裏面一個jQuery OBJ

$('#YesNo1').val(), 
$('#YesNo2').val() 
+0

這是真的,但他沒有id,因爲他們是單選按鈕ID將是不切實際的,因爲你不能有多個具有相同ID的元素 – mcgrailm 2011-05-13 17:44:35

+0

@mcgrailm:你不會給他們相同的ID。 – webbiedave 2011-05-13 17:51:44

+0

準確。所以你給他們單獨的ID。就像他們是複選框一樣。 – Andrew 2011-05-13 17:52:30

3

你選擇

$('YesNo1')是說找一個叫<YesNo1>如在單元標籤

+2

這是爲什麼這麼低估了?它在技術上是正確的,並提供教育信息。 – 2011-05-13 17:39:57

+0

沒有它沒有沒有「#」 – mcgrailm 2011-05-13 17:42:49

+1

@mcgrailm是的,這正是因爲沒有'#'。由於沒有'#',jQuery正在尋找名爲''的標籤! – 2011-05-13 17:45:18

0

我敢確定你的問題是單選按鈕的名稱。爲了簡化事情,我會使用像Q1Yes,Q1No這樣的命名結構,或者甚至嘗試讓你的問題措詞化,這樣如果單選按鈕被選中,這意味着用戶回答「是」,並且讓它不檢查爲「否」。在那個時候你可以將單選按鈕的名稱設置爲問題1和問題2。

+0

這是錯誤的,以及名稱不是最好的,這種情況對接不是問題 – mcgrailm 2011-05-13 17:46:02

2

你想要做的就是通過名字在那裏它被選中

$(form).ajaxSubmit({ 

    type: "POST", 
    data: { 

     YesNo1 : $('input[name="YesNo1[]"]:checked').val(); 
     YesNo2 : $('input[name="YesNo2[]"]:checked').val(); 

     }, 
    dataType: 'json', 
    url: './includes/ajaxtest3.php', 
    error: function() {alert("error!");},     
    success: $('#output2').html(data.message.join('<br />')); 
//... 

working demo

+0

@ mcgrailm謝謝。出於某種原因,當我使用上述解決方案時,我仍然遇到「未定義」。另外,代碼中應該有分號嗎?當我像你一樣使用它們時,我的JavaScript正在崩潰。 – Ken 2011-05-13 18:22:40

+0

對不起,你不需要選擇小提琴我選擇了與選中混淆 – mcgrailm 2011-05-13 18:38:51

+0

這不起作用,你的演示只輸出第一個值,在這種情況下,是'是'。如果你改變它的'no'進行檢查,它仍然會提示'yes':http://jsfiddle.net/6zypt/3/ – jeroen 2011-05-13 23:01:43

0

我用這個是巨大的成功,過去輸入。 您不需要將值存儲在數組中。讓你的輸入是這樣的:

<input class="option-child" type="radio" name="YesNo1" value="Yes" > 
<input class="option-child" type="radio" name="YesNo1" value="Yes" > 

然後你可以使用jquery拉選定的值的結果。然後

var YesNo1 =$("input[name=YesNo1]:checked").val(); 

YesNo1將包含所選選項的值

0

的選擇你需要的是:

$('input[name="YesNo1[]"]:checked').val(); 
$('input[name="YesNo2[]"]:checked').val(); 
相關問題