jquery更改事件没有解雇?

时间:2012-06-13 21:09:08

标签: jquery events combobox

我试图根据组合框中的更改事件更新隐藏的输入项。我有一堆下拉菜单,如果它们属于某个类(" test1"),我将动态更改为组合框。我想补充说我正在使用一些jquery,我在这里找到了一个" open"组合框....即。一个将接受任何用户输入而不仅仅是选项列表中可用的内容。我使用此处提供的javascript来实现此目的:jQuery combobox/autocomplete but editable

但是,只有下列之一有效......

   $(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;

2 个答案:

答案 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.
    };
});

答案 1 :(得分: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;