Javascript jquery选择选项单击处理程序

Javascript jquery选择选项单击处理程序,javascript,jquery,html,Javascript,Jquery,Html,鉴于: .. ... 使用select id,如何在其中一个选项上触发单击事件?我尝试将事件直接附加到select,但只要单击select,就会触发事件(即使没有选项)。哦,这是一个多选(虽然我不认为这有什么关系)。您想要的是“更改”事件处理程序,而不是“单击” <select id="mySelect"> <option>..</option> ... </select> 在这种情况下,我所做的是在option elements O

鉴于:


..
...

使用select id,如何在其中一个选项上触发单击事件?我尝试将事件直接附加到select,但只要单击select,就会触发事件(即使没有选项)。哦,这是一个多选(虽然我不认为这有什么关系)。

您想要的是“更改”事件处理程序,而不是“单击”

<select id="mySelect">
  <option>..</option>
  ...
</select>

在这种情况下,我所做的是在option elements OnClick事件中输入如下内容:

$('#mySelect').change(function(){ 
    var value = $(this).val();
});
<option onClick="something();">Option Name</option>
更新: 不幸的是,我不能发表评论,所以我正在更新这里

TrueBlueAussie显然jsfiddle出现了一些问题,请检查它是否有效:

您可以附加一个焦点事件进行选择

function something(){
    alert("Hello"); 
    }

一种可能的解决方案是为每个选项添加一个类

$('#select_id').focus(function() {
    console.log('Handler for .focus() called.');
});
更新:看起来代码在FF、IE和Opera中工作,但在Chrome中不工作。 看看这些规格,我会说这是Chrome的一个缺陷。

$('#mySelect')。在('change',function()上{
var值=$(this.val();
警报(值);
});

1.
2.
3.
4.
5.
6.
7.
8.

我使用
更改处理程序时遇到的问题是,每次我在
上下滚动时,它都会触发

我想在单击某个选项或在所需选项上按下
enter
时获取事件。我就是这样做的:

$(document).ready(function () {

    $(".export_option").click(function (e) {
        //alert('click');
    });

});
它对我有用

let blockChange = false;

$element.keydown(function (e) {

    const keycode = (e.keyCode ? e.keyCode : e.which);

    // prevents select opening when enter is pressed
    if (keycode === 13) {
        e.preventDefault();
    }

    // lets the change event know that these keypresses are to be ignored
    if([38, 40].indexOf(keycode) > -1){
        blockChange = true;
    }

});

$element.keyup(function(e) {

    const keycode = (e.keyCode ? e.keyCode : e.which);
    // handle enter press
    if(keycode === 13) {
        doSomething();
    }

});

$element.change(function(e) {

    // this effective handles the click only as preventDefault was used on enter
    if(!blockChange) {
        doSomething();
    }
    blockChange = false;

});

$(“#选择>选项”)。在(“单击”上,函数(){
警报(1)
})

您也可以尝试此操作以获取select的上一个值和单击的值

HTML

<select name="" id="select">
    <option value="1"></option>
    <option value="2"></option>
    <option value="3"></option>
</select>

<script>
    $("#select > option").on("click", function () {
       alert(1)
    })
</script>

如果他们选择相同的选项怎么办?更改事件不可用triggered@haz0rd您将只能通过单击事件检测到,您将获得2。1当您第一次单击“选择”时,1当您选择已选择的选项时,请注意,
单击
事件目前在Chrome中根本没有为
元素生成。@gon编码有没有办法绕过
单击
而不在Chrome中触发?这不是他要求的或他“想要的”。他要求在点击其中一个选项时触发一个事件。您的答案是一种变通方法,当您在更改事件@TrueBlueAussie刚刚在FF和IE中测试了您的小提琴时,单击“默认”或“相同选项”时不会触发。当您需要更改事件之前的值时,此处的“良好答案”将不会触发此方法,它可以作为expected@TrueBlueAussie即使在古老的好歌剧12中,它也能起作用@TrueBlueAustie我知道,你只在chrome上测试过它,我在chrome之外的其他地方测试过它。否则你应该写“它在crome中不起作用”,而不是“点击事件被下拉菜单吃掉”,这显然是不正确的。看我的更新那是不切实际的。如果它不能在最流行的浏览器中工作,那么它就不是一个实用的解决方案。我不负责在所有浏览器中测试您的答案。这将是你的:)先前的模棱两可的评论被删除。只是为了给学究们澄清一下:在撰写本文时,这个解决方案不适用于Chrome:这目前不适用于Chrome,因此应该避免:p.s您的代码缺少javascript代码,所以……下次至少要确保您已经将所有内容都实现到了别人的建议中,并通过“Chrome”进行检查调试器,它不工作,为什么!!在警告其他用户之前!!它不起作用,而且没有投票权;)该测试所需的唯一Javascript是内联的。如果你真的费心把你的
放在一个
中,使它成为有效的HTML,你会发现你的代码在Chrome上不起作用:否决票是正确的。在Chrome修复该问题之前,不应使用此代码:Pvar value=This.value也能很好地解决此问题。无需在jQuery选择中打包,请考虑对答案添加解释,以便其他人理解逻辑。
<select name="" id="select">
    <option value="1"></option>
    <option value="2"></option>
    <option value="3"></option>
</select>

<script>
    $("#select > option").on("click", function () {
       alert(1)
    })
</script>
<select name="status">
    <option value="confirmed">confirmed</option>
    <option value="packed">packed</option>
    <option value="shiped">shiped</option>
    <option value="delivered">delivered</option>
</select>

    var previous;

    $("select[name=status]").focus(function () {
        previous = this.value;
    }).change(function() {
        var next = $(this).val()
        
        alert("previous: "+previous+ " and Next: "+ next)
        
        previous = this.value;
    });