在IE7中,jquery selector / checked属性不会更新

时间:2011-08-22 17:26:42

标签: javascript jquery internet-explorer-7

我有一个由链接调用的函数,它应该检查特定div中存在的各种复选框(传递给函数。)适用于除IE之外的所有浏览器(7.)据我所知.attr('选中','checked'是使用jquery 1.5.1

执行此操作的正确方法
function selectall(industry){
    $("#"+industry+"Apps :checkbox").attr('checked', 'checked');
    $("#"+industry+"Apps :checkbox").change(); /* used for jqtransform plugin */
    }   

是否有我缺少的东西或更好的方法可以在所有浏览器中使用?我真的不在乎取消选择,只是选择。

HTML看起来像

<div id = 'HealthcareApps'>
<div style="clear: both;">
    <a href = "javascript:selectall('Healthcare');">Select all</a>
</div>
<ul>
    <li><label for="id_Healthcare_0"><input type="checkbox" name="Healthcare" value="1" id="id_Healthcare_0" /> Simple Messaging</label></li>
    <li><label for="id_Healthcare_1"><input type="checkbox" name="Healthcare" value="2" id="id_Healthcare_1" /> Mobile Alerts and Alarms</label></li>
    <li><label for="id_Healthcare_2"><input type="checkbox" name="Healthcare" value="3" id="id_Healthcare_2" /> Patient Identification / Drug Conflicts</label></li>
</ul>

(是的,我知道内联样式是一个可怕的想法。如果我能在IE中使用此链接,我也会解决这个问题。)

5 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:js fiddle demo

<div id = 'HealthcareApps'>
<div style="clear: both;">
    <a href="#" id="selectall" class="Healthcare" >Select all</a>
</div>
<ul>
    <li><label for="id_Healthcare_0"><input type="checkbox" name="Healthcare" value="1" id="id_Healthcare_0" /> Simple Messaging</label></li>
    <li><label for="id_Healthcare_1"><input type="checkbox" name="Healthcare" value="2" id="id_Healthcare_1" /> Mobile Alerts and Alarms</label></li>
    <li><label for="id_Healthcare_2"><input type="checkbox" name="Healthcare" value="3" id="id_Healthcare_2" /> Patient Identification / Drug Conflicts</label></li>
</ul>
</div>

jquery:

$('#selectall').click(function(e) {
    e.preventDefault();
    var industry = $(this).attr("class");
    $("#" + industry + "Apps :checkbox").attr('checked', 'checked');
});

并且,要打开和关闭:

$('#selectall').click(function(e) {
    e.preventDefault();
    var industry = $(this).attr("class");
    var checkbox = $("#" + industry + "Apps :checkbox");
    checkbox.attr('checked', !checkbox.attr('checked'));
});

js fiddle toggle demo

答案 1 :(得分:0)

试试这个

function selectall(industry){
    $("#"+industry+"Apps :checkbox").attr('checked', true);
    $("#"+industry+"Apps :checkbox").change(); /* used for jqtransform plugin */
}  

如果您使用jQuery 1.6+,则可以使用prop

$("#"+industry+"Apps :checkbox").prop('checked', true);

答案 2 :(得分:0)

尝试使用click()而不是change()。这似乎是一个IE7错误:

IE7 issues with my jQuery [click and change functions]

答案 3 :(得分:0)

试      $("#"+industry+"Apps input:checkbox").attr('checked', 'checked');

我没有时间来验证这一点(在工作中:))但我有一个潜行的怀疑,这将有助于ie7弄明白

答案 4 :(得分:0)

在您的标记中,'HealthcareApps'div没有结束标记。也许这是一个复制/粘贴遗漏,但如果不是,那么无效的标记可能是原因,特别是因为它是抱怨的IE7。