2011-05-13 84 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(); 
相关问题