Javascript JQuery--无法在click事件中正确获取选中的收音机

Javascript JQuery--无法在click事件中正确获取选中的收音机,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,页面代码如下: <input type="radio" class="direct" name="r1" value="first" /> <span class="proxy">radio1</span> <input type="radio" class="direct" name="r1" value="second" /> <span class="proxy">radio2</span> $('.

页面代码如下:

<input type="radio" class="direct" name="r1" value="first" />
    <span class="proxy">radio1</span>
<input type="radio" class="direct" name="r1" value="second" />
    <span class="proxy">radio2</span>
$('.direct').click(function(e) {
    var obj = $(this).parent(),
        value = obj.find('input:checked').val();
    if(value){
        alert('you click ' + value + ' button');
    }else{
        alert('you did not click a button');
    }
});
$('.proxy').click(function(e) {
    $(this).prev().click();
});​
这是你的电话号码

我的问题是:
为什么单击span text不像直接单击单选按钮那样有效。

如果将
for
属性设置为正确输入的标签,则可以避免所有这些问题

<input type="radio" class="direct" name="r1" id="r11" value="first"/>
<label class="proxy" for="r11">radio1</label>
<input type="radio" class="direct" name="r1" id="r12" value="second"/>
<label class="proxy" for="r12">radio1</label>​​​​​​​​​

无线电1
无线电1​​​​​​​​​

如果将带有
for
属性的标签设置为正确的输入,则可以避免所有这些问题

<input type="radio" class="direct" name="r1" id="r11" value="first"/>
<label class="proxy" for="r11">radio1</label>
<input type="radio" class="direct" name="r1" id="r12" value="second"/>
<label class="proxy" for="r12">radio1</label>​​​​​​​​​

无线电1
无线电1​​​​​​​​​

正如我前面所说,这个问题并不清楚,至少对我来说是这样。但是,如果您想在单击下一个span时检查收音机,可以通过以下方式:

$('.proxy').click(function(e) {
    $(this).prev().attr('checked', true)
});​

正如我之前所说,这个问题并不清楚,至少对我来说是这样。但是,如果您想在单击下一个span时检查收音机,可以通过以下方式:

$('.proxy').click(function(e) {
    $(this).prev().attr('checked', true)
});​


你不能使用
标签
元素吗?我不清楚你想要实现什么。当我单击相应的跨度时,我看到收音机已“选中”!你不能使用
标签
元素吗?我不清楚你想要实现什么。当我单击相应的跨度时,我看到收音机已“选中”!那是真的!但他似乎想用jQuery完成它!我想知道为什么!(至少在这种情况下)@HungryCoder嗯,这是因为我在维护别人的代码。如果我改变它的标签方式,我必须改变很多代码…这是真的!但他似乎想用jQuery完成它!我想知道为什么!(至少在这种情况下)@HungryCoder嗯,这是因为我在维护别人的代码。如果我将其更改为标签方式,我必须更改许多代码…这将设置前一个输入的属性为选中状态。在用户的问题中,单击事件被触发,并且没有设置以前输入的属性,因此他的编码不起作用。谢谢。最后,我通过:
$('.proxy').click(函数(e){$(this.prev().attr('checked',true);$(this.prev().click();});​@williamcarswell是的,我就是这个意思。你能告诉我为什么会发生这种情况吗?你可以试试你写的内容的简短格式<代码>$('.proxy')。单击(函数(e){$(this.prev().attr('checked',true.click();})@yejinxin很高兴你找到了解决方案。基本上,当您单击单选按钮时,输入单选字段设置为选中状态,但是,当您触发输入单选的.click()事件时,您没有将属性设置为选中状态。这会将以前输入的属性设置为选中状态。在用户的问题中,单击事件被触发,并且没有设置以前输入的属性,因此他的编码不起作用。谢谢。最后,我通过:
$('.proxy').click(函数(e){$(this.prev().attr('checked',true);$(this.prev().click();});​@williamcarswell是的,我就是这个意思。你能告诉我为什么会发生这种情况吗?你可以试试你写的内容的简短格式<代码>$('.proxy')。单击(函数(e){$(this.prev().attr('checked',true.click();})@yejinxin很高兴你找到了解决方案。基本上,当您单击单选按钮时,输入单选字段设置为选中状态,但是,当您触发输入单选的.click()事件时,您没有将属性设置为选中状态。