[英]Setting HTML check box to check using javascript
我有一個構造函數,可以在循環內創建一系列復選框。
我試圖將復選框設置為選中,但無法正常工作。
代碼如下:
function customMultiSelect(pDiv, pOptions, inputID, currentSelected)
{
this.Div = pDiv;
this.options = pOptions;
this._initialise();
for (var idxOption = 0; idxOption < pOptions.length; idxOption++) {
var checkbox = document.createElement("input");
checkbox.type = "checkbox";
checkbox.style.width = "30px";
checkbox.style.border = "none";
checkbox.style.float = "right";
if (pOptions[idxOption] != "") {
var arrTemp2 = pOptions[idxOption].split(",");
var sText = arrTemp2[0];
if (arrTemp2.length > 1) {
sText = arrTemp2[1];
}
checkbox.value = arrTemp2[0];
checkbox.id = inputID + "|" + idxOption;
checkbox.checked = true;
var textLabel = document.createElement("label");
textLabel.appendChild(checkbox);
textLabel.innerHTML += arrTemp2[1];
textLabel.style.display = "block";
textLabel.style.clear = "right";
}
this.Div.appendChild(textLabel);
}
}
只需將選中的屬性而不是checkbox.checked = true;即可。 :
checkbox.setAttribute('checked', true);
您的問題是因為您使用textLabel.innerHTML += arrTemp2[1];
這樣就可以重寫和解析HTML。 在此之前,您使用checkbox.checked = true
只操作DOM屬性,而在HTML中,它僅是<input type="checkbox">
,因此結果是textLabel.innerHTML = '<input type="checkbox">' + arrTemp2[1];
,再次為您提供一個未選中的復選框。
您應該使用checkbox.setAttribute('checked', 'checked')
,然后HTML將被<input type="checkbox" checked>
,在這種情況下, textLabel.innerHTML += arrTemp2[1];
等於textLabel.innerHTML = '<input type="checkbox" checked="checked">' + arrTemp2[1];
關於HTML屬性和DOM屬性之間的區別:
setAttribute
實際上操縱HTML屬性。 如果未設置DOM屬性,則該屬性將填充到該屬性。 但是,設置屬性后,更改屬性將不會影響屬性。 例如,您有一個輸入標簽:
<input type="text" value="asdf">
然后您在字段中輸入了一些內容,說“ qwer”,那么您將看到區別
document.querySelector('input').value // "qwer"
document.querySelector('input').getAttribute('value') // "asdf"
當您更改其屬性時
document.querySelector('input').setAttribute('value', 'zxcv')
您不會在頁面上看到任何更改,因為document.querySelector('input').value
仍然是“ qwer”。 更改實際上是在HTML中進行的,打開devtool您將看到:
<input type="text" value="zxcv">
最后,當您提交表單時發送的是DOM屬性 ,而不是屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.