选择组合框的OnChange事件永远不会在jQuery中触发

时间:2012-07-09 03:16:04

标签: jquery jquery-ui jquery-ui-autocomplete

我有以下代码,我尝试在jQuery中为select组合框创建on change事件处理程序,但我从未看到警告消息。这有什么不对?

  $(document).ready(function () {
        var combo = $("#Supplier_Sel").combobox();
        $($('.ui-combobox-input')[3]).css('width', '300px');
        $("#toggle").click(function () {
            $("#Supplier_Sel").toggle();
        });
        //this change event never gets fired. WHY??
        $("#Supplier_Sel").change("dssd",function () {
            alert('Handler for .change() called.');
        });
    });

另外,我在页面中包含了以下脚本。可能我需要为combobox onchange事件添加一些其他脚本吗?

    <script type="text/javascript" src="../jquery/jquery-1.7.2.js"></script>
    <script type="text/javascript" src="../jquery/ui/jquery-ui-1.8.21.custom.js"></script>
    <script type="text/javascript" src="../jquery/jquery.scrollIntoView.min.js"></script>

8 个答案:

答案 0 :(得分:4)

这会让每个人大吃一惊。但对我而言, 似乎就像火箭科学 。大声笑。 要触发jQuery组合框的更改事件,您应该始终使用如下代码。这篇文章中提到的各种方法都不会这样做。 我们需要在jQuery中为select元素调用组合框方法时对事件进行连接。此外,更改事件永远不会触发,但如果以上述方式连接,则所选事件始终会触发。

        $(document).ready(function () {
        $("#Supplier_Sel").combobox({
            selected: function (event, ui) {
                alert('Handler for .change() called.');
            }
        });
        $($('.ui-combobox-input')[3]).css('width', '300px');
        $("#toggle").click(function () {
            $("#Supplier_Sel").toggle();
        });
    });

如果你看一下组合框小部件jQuery代码,上面的方法是有道理的。如下所示。

select: function( event, ui ) {
                 ui.item.option.selected = true;
                 //select.val( ui.item.option.value );
                 self._trigger( "selected", event, {
                    item: ui.item.option
                 });
              }

答案 1 :(得分:1)

我不知道.combobox()方法做了什么,但我怀疑它需要一个实际的组合框并用它做一些HTML技巧。所以它可能实际上不再是一个下拉列表,并且没有使用onChange方法。

如果您提供了一个指向哪个库具有.combobox()方法的链接,有人可以检查,但我很确定它会成为一些跨度和文本输入元素(如jQuery) UI版本)。这些都没有改变方法。

答案 2 :(得分:1)

下面的代码对我有用。测试

如果选择简单的组合框,则使用下面的代码更改事件触发器;

$("#mySelectCombo").on('change',  function () {
                alert("test");              
            });

如果基于Jquery选择组合,则使用下面的代码更改事件触发器;

$("#mySelectCombo").combobox({                    
                select: function (event, ui) {
                   alert("hello");
                }
            });

答案 3 :(得分:1)

这对我有用:

    $("#combobox_old").combobox({
        selected: function (event, ui) {
            alert('Handler for .selected() called.');
        }
    });

Murugesan Bakthavachal,也写了解决方案(对我而言),但我认为其他代码不起作用,因为$.widget( "ui.combobox" , {...});代码已经有一个变更事件的定义,所以遵循代码不起作用:

    $("#mySelectCombo").on('change',  function () {
       alert("test");              
    });

答案 4 :(得分:0)

$("#Supplier_Sel").change(function () {
     alert('Handler for .change() called.');
 });

删除"dssd"

答案 5 :(得分:0)

//Assuming Supplier_Sel is the selectbox id,this will be all you need

        $("#Supplier_Sel").change(function () {
            alert('Handler for .change() called.');
        });
    //or if its dynamically generated then

 $('body').delegate('#Supplier_Sel','change',function () {
            alert('Handler for .change() called.');
        });

答案 6 :(得分:0)

尝试:

$('#Supplier_Sel').live('change',function(){
   alert('Handler for .change() called.');

});

答案 7 :(得分:0)

这是从jquery组合框触发事件的另一种方法。

其他人发布了:

How to trigger change in jqueryui combobox after underlying select is manually changed?