jquery选择选项单击处理程序

时间:2011-04-21 20:44:09

标签: javascript jquery html

下式给出:

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

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

8 个答案:

答案 0 :(得分:66)

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

$('#mySelect').change(function(){ 
    var value = $(this).val();
});

答案 1 :(得分:31)

$('#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>


EXAMPLE

答案 2 :(得分:1)

您可以附加焦点事件以选择

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

答案 3 :(得分:0)

我使用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;

});

答案 4 :(得分:0)

你也可以试试这个来获取之前的选择值和点击值。

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


答案 5 :(得分:-1)

它为我工作

<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>

答案 6 :(得分:-2)

我在这种情况下所做的是我将这样的选项元素OnClick事件放入:

<option onClick="something();">Option Name</option>

然后只需创建一个这样的脚本函数:

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

更新: 不幸的是我不能评论所以我在这里更新
TrueBlueAussie 显然 jsfiddle 遇到了一些问题,请查看此处是否有效:http://js.do/code/klm

答案 7 :(得分:-2)

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

<select name="export_type" id="export_type">
    <option class="export_option" value="pdf">PDF</option>
    <option class="export_option" value="xlsx">Excel</option>
    <option class="export_option" value="docx">DocX</option>
</select>

然后使用此类的单击处理程序

$(document).ready(function () {

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

});

更新:看起来代码可以在FF,IE和Opera中使用,但在Chrome中则不行。 查看规范http://www.w3.org/TR/html401/interact/forms.html#h-17.6我会说这是Chrome中的一个错误。