2012-06-13 159 views
1

我试图根据组合框中的更改事件更新隐藏的输入项。我有一堆下拉列表,如果它们属于某个类(“test1”),我将动态更改为组合框。我想补充说,我正在使用一些我在这里找到的jquery来获得一个“开放”组合框,即。一个将接受任何用户输入,而不仅仅是选项列表中可用的内容。我这里使用的用于此目的的JavaScript:jQuery combobox/autocomplete but editablejquery change event not firing?

然而,只有下面的作品之一......

$(document).ready(function() { 
     $(".test1").combobox(); 
    }); 

    $(document).ready(function() { 
     $(".test1").change(function() { 
      alert('test'); //Other logic to update hidden elements. 

     } 
     ); 
    }); 

如果我注释掉的功能,它可以将下拉到一个组合框,然后警惕火灾。如果我关闭警报功能,则组合框调用将起作用,并且下拉列表将更改为组合框。任何人都可以请建议解决方案?

更新:

我想通了,为什么这是行不通的(至少我是这么认为的)。在上面的链接中,组合框的更改行为已经处理完毕。我的额外更改事件处理程序不会被注册。我不得不添加我的代码到改变事件本身(如本段):

change: function (event, ui) { 
       var selset = "CHF Discharge Diagnosis"; 
        $(':hidden').filter($('input[selsetname="' + selset + '"]')).val(this.value); 
        alert($(':hidden').filter($('input[selsetname="' + selset + '"]')).val()); 

        if (!ui.item) { 
         var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"), 
          valid = false; 
+0

也许尝试将'$('。test1')。combobox();'内部的更改函数? –

+1

您需要提供更多详细信息,但如果使用javascript更改输入值,则onchange事件不会触发。 – gdoron

+0

您只需要一个文档就绪功能。你所有的功能都在里面。 –

回答

0

如果组合框改变HTML结构(例如创建UL或div元素代替形式选择和输入),那么它可以不触发该元素的更改事件。但在这里:http://jquery.sanchezsalvador.com/jquery/page/jquerycomboboxapi.aspx底部是一个带有onChange方法的片段。基于此尝试以下

$(document).ready(function() { 
    var cb = $(".test1").combobox(); 
    cb.combobox.onChange = function() { 
     alert('test'); //Other logic to update hidden elements. 
    }; 
}); 
0

我想我弄明白为什么这不起作用(至少我是这么认为的)。在UI小部件定义的链接中(http://stackoverflow.com/questions/9473268/jquery-combobox-autocomplete-but-editable),组合框的更改行为已被处理。我的额外更改事件处理程序不会被注册。我不得不将我的代码添加到更改事件本身中(如此代码片段):

change: function (event, ui) { 
      var selset = "CHF Discharge Diagnosis"; 
       $(':hidden').filter($('input[selsetname="' + selset + '"]')).val(this.value); 
       alert($(':hidden').filter($('input[selsetname="' + selset + '"]')).val()); 

       if (!ui.item) { 
        var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"), 
         valid = false;