JavaScript如何使用";这";使用onchange事件并选择元素
我的html中有几个select标记和div:JavaScript如何使用";这";使用onchange事件并选择元素,javascript,html,this,children,closest,Javascript,Html,This,Children,Closest,我的html中有几个select标记和div: <div> <select name="one" id="oneId" class="selectOne" onchange="myFunction()"> <option value="" disabled selected>choose*</option> &
<div>
<select name="one" id="oneId" class="selectOne" onchange="myFunction()">
<option value="" disabled selected>choose*</option>
<option value="1">Yes</option>
<option value="2">No</option>
</select>
<div class="show" style="display:none;">
<input type="number" value="" id="other"></input>
</div>
</div>
函数myFunction(){
var a=this.value;//选择此函数的“选择标记”
var b=this.closest(“show”);//选择最近的“show div”来选择标记
var c=b.children;//输入//在“show div”中选择输入
如果(a==1){
b、 style.display=“block”;
c、 删除属性(“禁用”);
}否则{
b、 style.display=“无”;
c、 setAttribute('disabled','disabled');
}
}
选择*
对
不
此
指的是onchange
函数中的select元素
您正在从该函数调用myFunction()
,因此,此
将成为窗口
内部的myFunction
如果要传递元素,则需要显式传递(作为参数或使用apply
或call
)
更好的是,不要使用内部事件属性(有各种各样的问题),而是使用
addEventListener
一旦你解决了这个问题,你会发现你使用的
最近的
是完全错误的
它搜索祖先而不是兄弟(因此您可能希望使用this.parentElement.querySelector
),就像querySelector
一样,它需要一个选择器而不是简单的类名。引用事件目标
此
将根据侦听器函数添加到元素的方式而有所不同
您可以使用添加侦听器
的事件
是实际的事件名称<代码>此
将是添加到的元素onevent
侦听器(例如,使用HTML属性onchange=“myFunction()”
)<代码>此将是全局对象,请参阅EventTarget.addEventListener()
。以下是您应该使用它的两个原因:
document.querySelector('button')。addEventListener('click',log);//案例1
document.querySelector('按钮:第n个子(2)')。onclick=log;//案例2
函数日志(){
log((this===globalThis?'this'是'globalThis':this));
}
使用addEventListener()
使用Element.onclick
使用OneEvent侦听器
也许您应该忘记内联侦听器,看看.Changethis.closest(“show”)代码>到这个最近的(“.show”)
as.closest()
采用CSS选择器,show
是一个类,而不是一个元素。查找祖先,但该div.show
是您的select
元素的同级。只需使用this.nextElementSibling
。您应该了解并了解如何使用传递的对象。这就解决了侦听器函数中的这个问题。
function myFunction() {
var a = this.value; // to select this "select tag" of this function
var b = this.closest("show"); // to select closest "show div" to select tag
var c = b.children; //input // to select input in "show div"
if (a == 1) {
b.style.display = "block";
c.removeAttribute("disabled");
} else {
b.style.display = "none";
c.setAttribute('disabled','disabled');
}
}