2014-08-27 116 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; 
}