2011-08-22 88 views
4

我有一个链接调用的函数,它应该检查存在于特定div(传递给该函数)内的各种复选框。 )据我可以告诉.attr(“检查”,“检查”是要做到这一点使用jQuery 1.5.1jQuery选择器/选中的属性不会在IE7中更新

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中运行)。

+2

如何' selectal l()'被调用?我看到一个'switchval()'... –

+0

哦,哎呀我在这里粘贴了这个函数后重命名了这个函数,所以它变得更有意义,然后不改变HTML。现在在实际的代码中更改它。假设我正在测试的代码是一致的哈哈。 – nando

回答

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

+0

有趣。我一整天都在回避这个问题,但我一定会尝试一下。 – nando

+0

只是遵循该链接,并验证它的工作原理!非常感谢!几小时的挫折只是被赶走了! – nando

+0

@nando太棒了,很乐意帮忙。 –

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); 
+0

同样的结果;作品FF /铬,不在IE7 – nando

0

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

IE7 issues with my jQuery [click and change functions]

+0

我试过这个无济于事。问题是jqtransform插件为change()事件定义了一个函数。 但是,jqtransform也会触发点击发生变化事件,所以这应该起作用了,但没有? (我也尝试过.trigger(“更改”),但在IE中也不行) – nando

+0

我想你必须告诉jqtransform关于IE7问题的开发人员。但是编写一个触发“变化”的click()事件处理函数会给你两全其美的好处吗? – Blazemonger

+0

是的,还有一些其他的东西,我想看到有关插件的变化,无论如何,我一定会尝试与他们碰面。同时你可能是对的 - 我会给自定义的.click()处理程序拍摄。 – nando

0

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

我没有时间来验证这一点(在工作:)),但我有一个偷渡怀疑这将有助于IE7图它出

+0

我希望!在粘贴时意外省略了相同的结果 – nando

0

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

+0

,但很好看。我想我可以检查其余的标记,但我相当肯定它已经有效(尽管这可以解释为什么其他建议都不会起作用......) – nando