2013-03-20 64 views
0

的8 GET价值我一直在谷歌上搜索约2小时,以解决以下问题(包括其他问题#1):Internet Explorer的单选框

<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     jQuery('input[type="radio"]').unbind('click.preset') 
     .bind('click.preset', function() { 
      doingStuffWith(jQuery(this).val()); 
     }); 
    }); 
</script> 

<input type="radio" name="lightType" value="led" /> 
<input type="radio" name="lightType" value="tube" /> 

正如你所看到的,我只是想找回单选按钮组“lightType”的当前值与它一起工作。这在Firefox/Safari/Chrome中很有魅力,但IE8只是返回一个空字符串而让我很难过。

我已经尝试了几个黑客从其他问题,如绑定更改事件的单选按钮,并迫使IE8通过模糊单击单选按钮来启动它。也许我是 刚刚患上了失明现在。

我正在使用最新的jQuery版本,并且确保没有其他绑定事件会受到干扰。但有趣的是,检索值前添加一个警报()和IE返回当前值:

.... 
// DOES WORK 
alert(); 
alert(jQuery(this).val()); // alerts e.g. "tube" 

// DOESN'T WORK 
alert(jQuery(this).val()); // alerts "" 

我认为这可能是一个时间的问题,而是试图耽误我用的setTimeout一个警报调用没有帮助。

在此先感谢大家,我希望我只是盲目,并没有在IE8中发现另一个丑陋的行为。

+0

帮助我学习为什么不干脆:'的jQuery(“输入[类型=”电台“)')。on('change',function(){ doingStuffWith(jQuery(this).val()); });' – 2013-03-20 23:27:24

+0

当控件失去焦点**时,IE中的更改侦听器触发**,这是根据W3C规范,但不直观,而不是其他浏览器如何实现它(他们有效地使用它作为一个单击复选框和单选按钮的侦听器)。因此,通常在这些元素上使用点击侦听器。 – RobG 2013-03-21 00:05:07

回答

0

谢谢你的回答,但没有人工作。我不确定这是否是jQuery中的错误,或者只是我在特定情况下遇到的问题。看起来jQuery强制IE8在字段真正改变之前触发更改事件。

我终于解决它通过结合模糊事件,并将其与powtacs结合:检查的解决方案是这样的:

<script type="text/javascript"> 
jQuery(document).ready(function() { 

    jQuery('input[type="radio"]').unbind('click.preset') 
    .bind('click.preset', function() { 
     jQuery(this).blur(); 
    } 

    jQuery('input[type="radio"]').unbind('blur.preset') 
    .bind('blur.preset', function() { 
     doingStuffWith(jQuery('input[type="radio"]:checked').val()); 
    }); 
}); 
</script> 
0

我会使用最新的jQuery和on():checked选择在回调:

jQuery(document).ready(function() { 
    jQuery('input[type="radio"]').on(function('change blur mousedown click') { 
     alert(jQuery('input[type="radio"]:checked').val()); 
    }); 
}); 

其实这是一个有点棘手,你不能在回调“这个”获取选定的单选按钮你必须使用其他选择器: How can I know which radio button is selected via jQuery?

+0

我可能是错的,但我相信如果您包含更改并单击“on”,它会在某些浏览器上启动两次。 – 2013-03-21 12:20:22

0

IE8的一个公平的选项,创建一个类每一个无线选项(!)并用它来选择选中的选项。语义是有点怪异,但它完美地工作对我说:

HTML

<input type="radio" name="example" class="example_class" value="1"/>#1 
<input type="radio" name="example" class="example_class" value="2"/>#2 
<input type="radio" name="example" class="example_class" value="3"/>#3 

JS

var exampleValue = $('.example_class:checked').val();