Javascript 单选按钮的奇怪结果

Javascript 单选按钮的奇怪结果,javascript,jquery,internet-explorer-9,Javascript,Jquery,Internet Explorer 9,我有一个带有一些单选按钮以及图表和图例的页面。当单选按钮更改时,调用onchange方法,这应该做两件事: 1.更改图例显示的部分 2.使用适当的数据重新绘制图形 以下是HTML的一个片段: <div id="divDailyRadioButtons" style="width:300px; "> <div class="divDailyRadio" style="left:25;top:50;"><input type="radio" name="radT

我有一个带有一些单选按钮以及图表和图例的页面。当单选按钮更改时,调用onchange方法,这应该做两件事: 1.更改图例显示的部分 2.使用适当的数据重新绘制图形

以下是HTML的一个片段:

<div id="divDailyRadioButtons" style="width:300px; ">
    <div class="divDailyRadio" style="left:25;top:50;"><input type="radio" name="radTotalHours" value="Total" onchange="sm_controller.Events_OnChangeDailyGraphsRadios();"  />Total Hours</div>
    <div class="divDailyRadio" style="left:25; top:75;"><input type="radio" name="radTotalHours" value="CF" onchange="sm_controller.Events_OnChangeDailyGraphsRadios();" />Customer-Facing</div>
    <div class="divDailyRadio" style="left:25; top:100;"><input type="radio" name="radTotalHours" value="NCF" onchange="sm_controller.Events_OnChangeDailyGraphsRadios();" />Non-Customer Facing</div>
</div>
好吧,这就是奇怪之处。。。我得到的值不是所选单选按钮的值,而是上一个单选按钮的值。经过一点搜索后,我添加了一些console.log行以检查:

console.log('val1: ' + $('input:radio[name=radTotalHours]').val());
console.log('val2: ' + $('input:radio[name=radTotalHours]:checked').val());
console.log('val3: ' + $('input[name=radTotalHours]').val());
console.log('val4: ' + $('input[name=radTotalHours]:checked').val());
val1和val3始终显示“总计”,而val2和val4始终匹配,但显示上一个单选按钮的值

我甚至补充了以下内容:

$('input', '#divDailyRadioButtons').each(function(){
    if($(this).attr('checked') == 'checked')
        console.log('val: ' + $(this).val());
    else
            console.log('xxx');
});
但在这里,无论选择了哪个电台,if语句总是被称为“Total”

作为旁注,我不得不为此使用IE9

有人知道这里发生了什么吗?

请尝试使用
$(this)
,而不是
开关($('input[name=radTotalHours]:checked').val())

函数yourRadioChangeHandler(){
开关($(this.val())//此处的“this”是一个已更改的无线电对象
{
个案‘总数’:
$('rowDailyFGraphsLegend').show();
$('rowDailyNCFGraphsLegend').show();
打破
案例“CF”:
$('rowDailyFGraphsLegend').show();
$('#rowDailyNCFGraphsLegend').hide();
打破
案例“NCF”:
$('#rowDailyFGraphsLegend').hide();
$('rowDailyNCFGraphsLegend').show();
打破
}
}
总小时数

因此,事实证明,有一个正在导入的库包含一些绑定事件,这些事件会影响收音机的工作方式(如Barmar所建议的)。我提出了两种可能的解决方案,它们都不好,但都有效

解决方案1:为这些无线电添加空绑定事件

$('input[name=radTotalHours]').change( function(){});
我认为这可能会暂停导入的事件或覆盖它。我不太清楚如何/为什么,但一旦这段代码就位,onchange就可以正常工作了

解决方案2:为每个收音机添加一个与其值匹配的类。将this参数添加到onchange函数中,然后使用该类确定正在使用哪个函数执行收音机的函数调用

$(target).attr('class');
这两种解决方案都是完全愚蠢的,但我工作的地方也是如此


无论如何,谢谢大家的帮助。

.attr('checked')
从HTML中获取属性,而不是按钮的当前状态。它在这里的工作方式与我预期的一样:是的,小提琴手的工作方式完全符合我的要求。我就是无法让它在应用程序中工作-(我想不出为什么它会有不同的工作方式。同时调用
onchange
处理程序,我使用相同的选择器。您是否使用任何类型的库或框架来更改单选按钮的显示方式?“这”将指向我的控制器对象。它只在我的原始帖子中起作用,因为我是insi但是,我喜欢你的想法,在html onchange中添加了(这个),并根据修改了我的函数。我添加了ScheduleManagerController.prototype.Events\OnChangeDailyGraphsRadios=function(target){console.log('val:'+$(target.val());但这实际上做了同样的事情,仍然总是得到上一个按钮的值。当您这样使用
onchange
时,函数的上下文不是您单击的元素,而是
window
。您需要执行
onchange=“yourRadioChangeHandler(此)”
然后向处理函数添加一个参数。Barmar,我想我们说的是同一件事。我将onchange更改为
onchange=“sm\u controller.Events\u OnChangeDailyGraphsRadios(this);”
并且函数本身是'ScheduleManagerController.prototype.Events\u OnChangeDailyGraphsRadios=function(target'),但这不起作用。
$('input[name=radTotalHours]').change( function(){});
$(target).attr('class');