2011-08-22 46 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