Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当dropdownlist包含一项时,不会触发jQuery更改_Javascript_Jquery - Fatal编程技术网

Javascript 当dropdownlist包含一项时,不会触发jQuery更改

Javascript 当dropdownlist包含一项时,不会触发jQuery更改,javascript,jquery,Javascript,Jquery,我试图在单击下拉列表中的选项时触发事件。我找不到任何解释怎么做的东西。我想要的是触发事件并使用它的值。当我使用.on而不是.change时,我会在每次单击select时触发事件,而这不是我想要的,因为我只想使用所选项目的值 假设这是动态生成的: <select id="dropdownOne"> <option value="1">NumberOne</option> </select> 我怎样才能: 触发dropdownlist中仅包含一个项

我试图在单击下拉列表中的选项时触发事件。我找不到任何解释怎么做的东西。我想要的是触发事件并使用它的值。当我使用.on而不是.change时,我会在每次单击select时触发事件,而这不是我想要的,因为我只想使用所选项目的值

假设这是动态生成的:

<select id="dropdownOne">
<option value="1">NumberOne</option>
</select>
我怎样才能:

  • 触发dropdownlist中仅包含一个项目的项目上的事件
  • 在多次单击的项目上触发事件
编辑:因此,我的问题被标记为重复:

“副本”有6个答案:

维姬·库马尔:说这个问题的代码是好的,有效的。 这个答案与我的问题无关

阿杰波库斯:有一个答案,后来被编辑说它不起作用。 不起作用

Krupesh Kotecha:在选择上使用单击事件,其行为与相同 这不是我想要的

Teja:修复了这个问题,但不是我的问题,当te select只有1个选项或您多次单击某个选项时,仍然不会触发任何事件 这不是我想要的

charu joshi:Uses.on事件与:option selector一起使用,不起作用,因为:option selector未知,在jQuery API文档中也找不到 不起作用

derp:这个答案解释了如何删除重复项,然后使用更改事件,这可能适用于“重复”问题,但我从未在我的select中加载重复项,即使如此,它仍然使用更改事件,而更改事件并没有完成我在问题中所解释的任务 这个答案与我的问题无关

因此,上述“重复”问题的所有答案不适用于我的问题。此外,这些答案都没有被原海报标记为已接受。

请尝试以下代码:

var value;
$('select').focus(function () {
        value = this.value;
        if(value == 1){
            console.log("This logs number 1");
        }else{
            console.log("This logs number 2");
        }
    }).change(function() {
      value = this.value;
      if(value == 1){
        console.log("This logs number 1");
      }else{
        console.log("This logs number 2");
      }
});
以下是JSFIDLE链接:


对于select下拉列表中的一个项目,我得到了value focus事件,在选择item之后,通过change事件更新value。希望它能实现你的目标

下面的代码可能满足您的需要,尽管它并不完全符合您的要求。当你点击标有选项的按钮时,它会打开一个小菜单,而当你点击关闭菜单时,它就会消失。虽然它实际上不是一个下拉菜单,但它起着一个下拉菜单的作用

问题是您试图改变控件的内部结构,而不是基于控件本身进行操作。除了在接口中指定之外,Javascript对控件的内部几乎没有控制权


var按钮;
可变区;
var菜单;
var闭合器;
函数启动器(){
button=document.getElementById(“按钮”);
textarea=document.getElementById(“textarea”);
menu=document.getElementById(“菜单”);
closer=document.getElementById(“close”);
textarea.value=“选择的显示区域\r\n”;
button.onclick=打开;
closer.onclick=关闭;
}
函数关闭(){
menu.style.display=“无”;
menu.style.visibility=“隐藏”;
}
函数open(){
menu.style.display=“block”;
menu.style.visibility=“可见”;
}
功能按键(字符){
textarea.value=textarea.value+char+“\r\n”;
}
window.onload=启动器;
#菜单{显示:无;边框:2px纯黑色;}
单击标记有选项的按钮打开菜单进行选择

单击选项将使其显示在文本框中

  • 根据定义:

    当元素的值已更改时发生onchange事件 变了

    只有一个选项时,如:

    <select id="dropdownOne">
       <option value="1">NumberOne</option>
    </select>
    

    或者,您可以创建自定义选择控件,如

    所建议的
    change
    事件的问题是什么?您可以在注册事件时调用处理程序<代码>$(“选择”).on(“更改”,函数(){}).change()
    $(“选择”)。更改(“单击”,函数(){
    $(“选择”)。在(“单击/更改”,函数(){
    ?在下拉列表中同时包含
    单击
    更改
    事件是个坏主意,更改事件之后是单击下拉列表本身。因此最好决定何时附加
    单击
    事件。这些都不起作用,最终我希望触发更改(或任何更改)当下拉列表中只有一个选项可用时,可以处理选项单击的事件,但我不想仅在单击实际选项时通过单击下拉箭头触发事件。请尝试此
    $(“选择”).change(函数(){$('#选择选项:已选择').val()}
    这是最简单的解决方案。默认选择第一个选项可防止触发onchange。如果不想开发自定义下拉列表,在顶部添加占位符选项是实现此目的的唯一方法。
    var value;
    $('select').focus(function () {
            value = this.value;
            if(value == 1){
                console.log("This logs number 1");
            }else{
                console.log("This logs number 2");
            }
        }).change(function() {
          value = this.value;
          if(value == 1){
            console.log("This logs number 1");
          }else{
            console.log("This logs number 2");
          }
    });
    
    <select id="dropdownOne">
       <option value="1">NumberOne</option>
    </select>
    
    <select id="dropdownOne">
        <option value="-1">--- Select ---</option>
        <option value="1">NumberOne</option>
    </select>