2014-12-28 36 views
0

這是我的JavaScript,使用jQuery:.attr( '檢查', '檢查')/ .attr( '檢查', '真')在HTML中不添加屬性

$("#E_DIV_H input[value='E,F']").attr('checked', 'checked'); 
var data = $('#E_DIV_H').html(); 
$('#copy').html(data); 

當它複製從一個<div>#E_DIV_H)到另一個DIV(#copy)的數據,它將取消選中由於以下代碼已經被檢查的複選框!

$("#E_DIV_H input[value='E,F']").attr('checked', 'checked'); 

用Firebug,我看到.attr('checked', 'checked')被選中複選框不添加屬性。

有什麼解決方案可以跨瀏覽器?我正在使用jQuery 1.4.2。

+1

搜索「屬性與屬性」。 – undefined

+2

@Vohuman但是'.attr()'應該更新DOM節點屬性並且'.prop()'被添加到1.6中 –

+0

@Vohuman支持jQuery 1.6+版本! –

回答

1

要在jQuery的版本< 1.6更新布爾屬性爲checked,你應該使用JavaScript setAttribute()方法,如:

$("#E_DIV_H input[value='E,F']")[0].setAttribute('checked', true); 

如果你有目標不止一個元素,那麼你必須通過收集迭代,例如:

var els = document.querySelectorAll("#E_DIV_H input[value='E,F']"); 
for (var i=0; i < els.length; i++) { 
    els[i].setAttribute("checked", true); 
} 
2

如果要複製元素,請使用.clone()。使用HTML很麻煩。

$('#copy').replaceWith(
    $('#E_DIV_H').clone().attr('id', 'copy') 
); 

不管怎麼說,這是不工作的原因可能是因爲(你知道).prop()在1.6.0介紹;在此之前,.attr()完成了它的工作,可能是設置屬性而不是屬性。