在IE6,IE7中单击时动态添加的单选按钮未更新

时间:2010-12-13 07:38:43

标签: javascript jquery internet-explorer-7 internet-explorer-6 radio-button

我使用jQuery动态地向DOM添加了一组单选按钮。我已经注册了事件处理程序,它运行良好。但是,在IE6和IE7中单击时,单选按钮组不会更新选中的按钮。

我的原始代码类似于:

<body>
<form action="radio-ie7_submit" method="get" accept-charset="utf-8"></form>
<script type="text/javascript" charset="utf-8">
    $(function() {
        $.each(['A','B', 'C'], function (i, e) {
            $('<input>')
                .attr('type', 'radio')
                .attr('name', 'foo')
                .attr('checked', i == 1 ? 'checked' : '')
                .val(e)
                .appendTo($('form'))
                .after(e + '<br />')
                .click(function(){
                    alert('Kliiik')
                })
        })  
    })
</script>
</body>

同样,当我单击一个单选按钮时,会正确调用事件处理程序,但不会更新单选按钮。我做了这个似乎有效的黑客攻击:

<body>
<form action="radio-ie7_submit" method="get" accept-charset="utf-8"></form>
<script type="text/javascript" charset="utf-8">
    $(function() {
        $.each(['A','B', 'C'], function (i, e) {
            $('<input>')
                .attr('type', 'radio')
                .attr('name', 'foo')
                .attr('checked', i == 1 ? 'checked' : '')
                .val(e)
                .appendTo($('form'))
                .after(e + '<br />')
                .click(function(){
                    $('input[name="' + this.name + '"]').each(function () { this.checked = false });
                    this.checked = true;
                    alert('Kliiik')
                })
        })  
    })
</script>
</body>

基本上,我的修复工作是取消选中单选按钮组中的所有按钮,然后将单击的按钮标记为已选中。这似乎有点哈哈。有没有更好的方法来处理这个?有没有人遇到过这个问题,可以更深入地了解它的行为方式?

感谢。

1 个答案:

答案 0 :(得分:3)

这是表单元素的旧IE问题。这不应该归咎于Jquery。如果您想为IE 6用户进行解决,那么您可以将您的点击功能设为

            .click(function(){
                $('input[name="' + this.name + '"]').attr('checked',''); 
                this.checked = true; 
                alert('Kliiik')                
            })