首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保使用javascript更新select也会触发onchange侦听器?

如何确保使用javascript更新select也会触发onchange侦听器?
EN

Stack Overflow用户
提问于 2017-12-16 19:36:42
回答 1查看 59关注 0票数 0

在HTML中,元素对象有许多模拟用户与元素交互的方法。

,例如

  • .click()
  • .focus()
  • .blur()

如果给定元素有一个onclick事件侦听器附加到它:

代码语言:javascript
复制
myElement.addEventListener('click', myFunction, false);

然后,可以用javascript触发该事件侦听器:

代码语言:javascript
复制
myElement.click();

但是,如果所讨论的元素是<select>中的一个<select>,而<select>上的事件侦听器是:

代码语言:javascript
复制
mySelect.addEventListener('change', myFunction, false);

如何触发该事件侦听器?

完整示例:

代码语言:javascript
复制
var boxes = document.getElementsByClassName('box');
var clickBox = boxes[0];
var hoverBoxForClickBox = boxes[1];
var hoverBoxForSelect = boxes[2];

var select = document.getElementsByTagName('select')[0];
var options = select.getElementsByTagName('option');

function updateOption() {

    for (var i = 0; i < options.length; i++) {
        if (options[i].selected === true) {
            options[i].removeAttribute('selected');
        }
    }
    
    options[1].selected = true;
}

clickBox.addEventListener('click', function(){console.log('Clickbox has been clicked');}, false);

hoverBoxForClickBox.addEventListener('mouseover', function(){clickBox.click();}, false);

select.addEventListener('change', function(){console.log(select.value + ' has been selected');}, false);

hoverBoxForSelect.addEventListener('mouseover', updateOption, false);
代码语言:javascript
复制
.box {
display: inline-block;
width: 100px;
height: 100px;
color: rgb(255, 255, 255);
font-weight: bold;
line-height: 100px;
text-align: center;
font-family: arial, helvetica, sans-serif;
cursor: pointer;
}

.clickbox {
background-color: rgb(255, 0, 0);
}

.hoverbox {
background-color: rgb(0, 0, 255);
}

select {
margin-right: 36px;
}
代码语言:javascript
复制
<div class="box clickbox">Click Me</div>
<div class="box hoverbox">Hover Me</div>

<select>
<option value="option-1">Option 1</option>
<option value="option-2">Option 2</option>
<option value="option-3">Option 3</option>
<option value="option-4">Option 4</option>
<option value="option-5">Option 5</option>
</select>

<div class="box hoverbox">Hover Me</div>

您可以看到,当第二个悬停盒悬停时,<option>总是更改回选项2,但是.事件侦听器不触发。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-16 20:49:39

为什么不去掉匿名函数,使用一个好的老名字一个呢?

https://jsfiddle.net/4terzna8/

片段:

代码语言:javascript
复制
function onChangeSelect(){
    console.log(select.value + ' has been selected');
}

function updateOption() {
 for (var i = 0; i < options.length; i++) {
    if (options[i].selected === true) {
        options[i].removeAttribute('selected');
    }
 }

 options[1].selected = true;

 onChangeSelect();
}
select.addEventListener('change', onChangeSelect, false);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47849285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档