2014-08-27 143 views
1

所以我有3個無線電按鈕 具有不同的值,當我選擇其中一個它總是給我的價值「3」或他們的最後一個值。我嘗試提交沒有AJAX它工作正常!AJAX發送錯誤信息

這裏是我的.js代碼

$(document).ready(function(){ 

$('form').on('submit', function() { 
    var that = $(this), 
    url = that.attr('action'), 
    type = that.attr('method') , 
    data = {}; 

    that.find('[name]').each(function(index, value){ 
     var that = $(this), 
     name = that.attr('name'), 
     value = that.val(); 


     data[name] = value; 
    }); 

     $.ajax({ 
     url: url, 
     type: type, 
     data: data, 
     success : function(rdata) { 
       $("#st").html(rdata); 
     } 
    }); 

    return false; 
}); 
}); 

,這裏是我的html:

<form action="test.php" id="send" method="POST" accept-charset="UTF-8" autocomplete="off"> 
<table> 
    <tr><td><input type="radio" name="val" value="1">1</td></tr> 
    <tr><td><input type="radio" name="val" value="2">2</td></tr> 
    <tr><td><input type="radio" name="val" value="3">3</td></tr> 
    <tr><td><input type="submit"></td></tr><tr><td><div id='st'></div>/td></tr>   

</table> 

test.php的:

if (isset($_POST['val'])) { 
    $val = $_POST['val']; 
    echo $val; 
} 

回答

1

要根本解決這個問題,你應該改變以下行如下:

..  
that.find('[name]:checked').each(function(index, value){ 
.. 

你是什麼在那裏做的是遍歷所有的單選按鈕,並始終將值賦給變量,而不管單選按鈕的檢查狀態如何。使用:checked修飾符,您告訴它只查看被檢查的元素(實際上,在這種情況下.each並不是非常必要)。你可以修改它是這樣的(因爲你通常只有一個無線電選中),用以下替換.each迭代:

checkedRadio = that.find('[name]:checked'); 
name = checkedRadio.attr('name'); 
value = checkedRadio.val(); 

data[name] = value; 
+0

謝謝先生,曾擔任魅力:D – maxhill901 2014-08-27 11:47:18

1

嘗試使用下面的代碼片段得到選定的單選按鈕VA lue 現在你遍歷所有的單選按鈕併發送數據以獲得按鈕的值(因此總是發送each()中的最後一個)。

$('input[name=val]:checked').val() 

我已經更新了你的代碼的答案填寫:

$(document).ready(function(){ 

$('form').on('submit', function() { 
    var that = $(this), 
    url = that.attr('action'), 
    type = that.attr('method') , 
    data = {}; 

    data[name] = $('input[name=val]:checked').val(); 

     $.ajax({ 
     url: url, 
     type: type, 
     data: data, 
     success : function(rdata) { 
       $("#st").html(rdata); 
     } 
    }); 

    return false; 
}); 
}); 
+0

與代碼更新的答案說明我的意思 – RichardBernards 2014-08-27 11:36:57

+0

他實際上檢索名稱'attribute'成'variable'叫名字。您的代碼現在將停止,因爲當前未定義名爲'name'的變量。看我的意思。 – Gabor 2014-08-27 11:38:31

+0

正確輸入名稱的更新示例 – RichardBernards 2014-08-27 11:42:09

1

工作演示:JSFiddle - You can check console network it is sending the data.

你想獲得的價值這被選中,因此您可以使用$('input[name=val]:checked').val()

單選按鈕嘗試這樣的:

$(document).ready(function(){ 

     $('form').on('submit', function() { 
     var that = $(this), 
     url = that.attr('action'), 
     type = that.attr('method') , 
     data = {}; 

     //data[name] = $('input[name=val]:checked').val(); 

     $.ajax({ 
      url: url, 
      type: type, 
      data: 'val = '+$('input[name=val]:checked').val();, 
      success : function(rdata) { 
       $("#st").html(rdata); 
      } 
     }); 

     return false; 
    }); 
}); 

然後就可以得到價值在你test.php的文件是這樣的:

if (isset($_POST['val'])) { 
    $val = $_POST['val']; 
    echo $val; 
}