2017-04-01 46 views
0

我怎麼會藉此:創建<select>與平變化和事件監聽

<select onchange='disable(this)'> //options here </select> 

,並使其陷入的createElement和事件監聽?我不知道如何添加onchange =「disable(this)」。

到目前爲止,我有:

var optionList = ["default", "yes", "no"]; 

var td = document.createElement("td"); 
selectList = document.createElement("select"); 
selectList.addEventListener("change", lockSelect, false); 
td.appendChild(selectList); 
newTableRow.appendChild(td); 

for (var j = 0; j < optionList.length; j++) 
{ 
    option = document.createElement("option"); 
    option.value = optionList[j]; 
    option.text = optionList[j]; 
    selectList.appendChild(option); 
} 

這使得<select><options>,但我不能想出如何使onchange=disable(this)

+0

'禁用()'是一個函數。你能表現出來嗎?它有什麼作用? –

+0

@ RokoC.Buljan什麼都沒有。我只是想弄清楚如何調用它... – qwiqwiqwiqwiqwi

+0

提示與技巧:不要在父母插入到DOM之後一個接一個地添加元素(在你的情況下爲'option'元素)** ,**但之前!** - 當'select'元素被創建並且仍然在內存中時。比如,一旦你將孩子追加到它 - 將你的'select'發送到DOM。 –

回答

1

你需要爲lockSelect創建一個函數。您沒有顯示disable的功能,所以我必須猜測。

lockSelect應該調用disable將事件目標元素傳遞給它。

將禁用的函數改爲對事件對象進行操作可能會更好。並將其直接傳遞給事件監聽器。

function disable(e) { 
    e.target.disabled = true 
} 

var optionList = ["default", "yes", "no"]; 
 
var newTableRow = document.querySelector('tr') 
 

 
function disable(element) { 
 
    element.disabled = true 
 
} 
 

 
function lockSelect(e) { 
 
    disable(e.target) 
 
} 
 

 
var td = document.createElement("td"); 
 
selectList = document.createElement("select"); 
 
selectList.addEventListener("change", lockSelect, false); 
 
td.appendChild(selectList); 
 
newTableRow.appendChild(td); 
 

 
for (var j = 0; j < optionList.length; j++) { 
 
    option = document.createElement("option"); 
 
    option.value = optionList[j]; 
 
    option.text = optionList[j]; 
 
    selectList.appendChild(option); 
 
}
<table> 
 
    <tr></tr> 
 
</table>

+1

這工作,謝謝。 Idk我在想什麼,但我想我可以在lockSelect函數內完成這一切... – qwiqwiqwiqwiqwi

+0

@qwiqwiqwiqwiqwi - 是的,你可以只有'函數lockSelect(){this.disabled = true; },因爲用addEventListener()綁定的事件處理程序將把this設置爲有問題的元素。 – nnnnnn