jquery 选择选项单击处理程序

IT技术 javascript jquery html
2021-03-09 00:39:48

给出:

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

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

6个回答

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

$('#mySelect').change(function(){ 
    var value = $(this).val();
});
@haz0rd 您将只能通过单击事件检测到该事件,当您第一次单击选择时,您将获得 2. 1,当您选择已选择的选项时,您将获得 1
2021-04-25 00:39:48
如果他们选择相同的选项怎么办?未触发更改事件
2021-04-28 00:39:48
@GoneCoding 有什么办法可以解决click在 Chrome 中不触发的问题?
2021-05-01 00:39:48
这不是他所要求的,也不是他“想要”的。他要求点击其中一个选项时触发的事件。您的答案是单击默​​认或相同选项时不会触发的解决方法
2021-05-04 00:39:48
请注意,当前在 Chrome 中click根本不会元素生成事件<option>
2021-05-15 00:39:48

$('#mySelect').on('change', function() {
  var value = $(this).val();
  alert(value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<select id="mySelect">
  <option value='1'>1</option>
  <option value='2'>2</option>
  <option value='3'>3</option>
  <option value='4'>4</option>
  <option value='5'>5</option>
  <option value='6'>6</option>
  <option value='7'>7</option>
  <option value='8'>8</option>
</select>


例子

var value = this.value 也适用于此。无需包装在 jquery 选择器中
2021-05-11 00:39:48

你可以附加一个焦点事件来选择

$('#select_id').focus(function() {
    console.log('Handler for .focus() called.');
});

我在change处理程序上遇到的问题是它在我上下滚动<select>.

我想在单击选项或enter按下所需选项时获取事件这就是我最终这样做的方式:

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;

});

您也可以尝试此操作以获取选择的先前值和单击的值。

HTML

<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;
    });