我有一个带有onchange的选择框:
<select id="select" onchange="eventA();">
我想改变&#34; onchange&#34;到其他东西,例如到eventB();。
我已根据这篇文章尝试了这个:How to add an onchange event to a select box via javascript?
document.getElementById("select").onchange="eventB()";
然而,没有任何反应,onchange不会改变。
有什么想法吗?
答案 0 :(得分:2)
您好,您应该尝试使用此代码。
<html>
<head>
<title> Script </title>
<script type='text/javascript'>
function changeFirst(){
alert('I am first');
}
function changeSecond(){
alert('I am second');
}
function changer(){
document.getElementById('selectinput').attributes.onchange.nodeValue = "changeSecond()";
}
</script>
</head>
<body onload="changer()">
<select id="selectinput" onchange="changeFirst()">
<option value="1"> One </option>
<option value="2"> two </option>
<option value="3"> three </option>
<option value="4"> four </option>
<option value="5"> five </option>
</select>
</body>
</html>
使用jquery而不是纯粹的javascript有点容易。但是使用javascript,您无法更改任何属性,如value或innerHTML。 document.getElementById('ELEMENT_ID')将返回html标记而不是对象。您可以使用document.getElementById('ELEMENT_ID')。value ='your_value'来更改值,但更改任何事件属性都不是这样做的。 document.getElementById('ELEMENT_ID')。属性将返回元素的所有已使用属性,您可以使用nodeValue更改它的值,如我在示例中所示。
根据您的需要再做一次澄清,如果您在选择框更改事件中编写此代码,而不是每次调用第一个事件时,例如如果我将changer()函数代码写入changeFirst()函数而不是selectbox的更改事件将在第一次触发changeFirst()并从下一次触发changeSecond()事件。所以我建议你使用jquery change事件而不是使用纯javascript来防止这种混淆。
答案 1 :(得分:2)
ILE,你能试试这段代码吗?
document.getElementById('select').setAttribute('onchange','eventB();');
答案 2 :(得分:1)
答案在评论中。对于您的代码:
document.getElementById("select").onchange="eventB()";
你不应该将属性设置为字符串,你应该分配一个函数引用,所以:
document.getElementById("select").onchange = eventB;
分配字符串可能适用于某些浏览器,但所有浏览器都支持分配功能。
您可能会发现MDN onchange article很有帮助,它也有相关标准的链接。
答案 3 :(得分:0)
我会为你的班级使用经典的香草javascript事件监听器。像:
var select = document.getElementById("select");
select.addEventListener("change", function(){
eventB();
});
或者:
var select = document.getElementById("select");
select.addEventListener("change", eventB);