首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在选择下拉之前触发函数

如何在选择下拉之前触发函数
EN

Stack Overflow用户
提问于 2021-12-12 22:45:39
回答 2查看 50关注 0票数 0

如果返回false,如何在选择和中止下拉之前触发一个函数?

也许是这样的:

代码语言:javascript
运行
复制
document.querySelector('select').addEventListener('click',(e)=>{ 
 if(check()==false)
  e.target.abortdropdown();
})
EN

回答 2

Stack Overflow用户

发布于 2021-12-12 23:40:35

您可以在选择框周围放置一个容器,并将其绑定到click事件。然后检查check()函数,并根据复选框发生的情况采取行动。。

代码语言:javascript
运行
复制
let check = () => {return false;};

const w = document.querySelector('#wrapper');
const s = w.querySelector('select');

w.addEventListener('click',(e) => {
  const os = s.querySelectorAll('option');
  
  if(check() == false){    
    s.setAttribute('onclick',"abortdropdown()");
    console.log('check() is false');  
    abortdropdown(os);
    
  } else {
    console.log('check() is true');  
    setdropdown(os);
    
  }      
});  


function abortdropdown(os) {
  os.forEach((el) => {
    el.classList.add('hide');
  })  
}

function setdropdown(os) {
  os.forEach((el) => {
      el.classList.remove('hide');
  })        
}
代码语言:javascript
运行
复制
.hide {
  display:none;
}
代码语言:javascript
运行
复制
<div id="wrapper">
  
  <select >
    <option class="hide">1</option>
    <option class="hide">2</option>
    <option class="hide">3</option>
  </select>
  
</div>

更新

下面是一个更好的例子。在本例中,包装器/父容器(也可以是您的身体)是通过鼠标切换触发的(load或类似的也适用)。这将检查check()函数。然后将选择框设置为禁用或删除禁用。这个应该能做你想做的。

代码语言:javascript
运行
复制
const parent = document.getElementById('parent');
const s = parent.querySelector('select');

let check = () => {return true;};

parent.addEventListener('mouseover', (e) => {
  
  if(check() == false){    
    s.setAttribute('disabled',"disabled");
    console.log('check() is false');      
    
  } else {
    console.log('check() is true');  
    s.removeAttribute('disabled')    
  }  
});
代码语言:javascript
运行
复制
select[disabled] {pointer-events:none}
代码语言:javascript
运行
复制
<div id="parent">  
  <select disabled>
    <option class="hide">1</option>
    <option class="hide">2</option>
    <option class="hide">3</option>
  </select>
  
</div>

票数 1
EN

Stack Overflow用户

发布于 2021-12-12 23:11:25

我想你是在找这个,https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault

那么如果内部情况应该是。

代码语言:javascript
运行
复制
If (check==false) {
    e.target.preventDefault();
}

这样就停止了对事件的进一步默认处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70328316

复制
相关文章

相似问题

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