2

我有以下代码,我尝试在 jQuery 中为选择组合框创建 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.');
        });
    });

此外,我的页面中包含以下脚本。可能我需要为组合框 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>
4

8 回答 8

4

这会让所有人大吃一惊。但对我来说,这似乎是火箭科学。哈哈。要触发 jQuery 组合框的更改事件,您应该始终使用如下代码。这篇文章中提到的所有各种方法都不会这样做。当我们在 jQuery 中为选择元素调用组合框方法时,我们需要连接事件。此外,change 事件永远不会触发,但如果以上述方式连接,它出现的选定事件总是会触发。

        $(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
                 });
              }
于 2012-07-09T04:29:22.383 回答
1

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

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

于 2012-07-09T04:21:14.457 回答
1

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

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

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

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

$("#mySelectCombo").combobox({                    
                select: function (event, ui) {
                   alert("hello");
                }
            });
于 2014-04-11T00:06:25.043 回答
1

这对我有用:

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

Murugesan Bakthavachal 也写了解决方案(对我来说),但我认为其他代码不起作用,因为$.widget( "ui.combobox" , {...});代码已经定义了更改事件,因此后续代码不起作用:

    $("#mySelectCombo").on('change',  function () {
       alert("test");              
    });
于 2015-08-24T02:20:12.897 回答
0
$("#Supplier_Sel").change(function () {
     alert('Handler for .change() called.');
 });

消除"dssd"

于 2012-07-09T03:19:41.713 回答
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.');
        });
于 2012-07-09T03:20:32.710 回答
0

尝试:

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

});
于 2012-07-09T03:22:06.953 回答
0

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

还有人发帖:

手动更改基础选择后如何触发jqueryui组合框中的更改?

于 2013-11-19T22:12:09.987 回答