0

我有一个带有 onchange 监听器的选择框。当人类使用它时,它可以 100% 发挥作用。

我添加了一个带有 jQ​​ueryUI 的模态对话框,以在所述列表上创建一个新选项。这也 100% 有效。

但是,在将所述新选项添加​​到列表后,我试图“伪造”要触发的更改事件,因此用户不必这样做。它似乎永远不会开火。

我可以这样使用触发器吗?

//##### ADDC ####//
$( "#add" ).click(function(){
    $( "#addform" ).dialog({
        autoOpen: true,
        height: 200,
        width: 350,
        modal: true,
        buttons: {
            "Add": function() { 
                var f = $('#folder').val();
                var request = $.ajax({  
                    url: "process.it"
                    ,  type: "POST"
                    ,  data: {  f  : f   }
                });                 
                request.done(function(msg) {
                    $("#version").append( $('<option></option>').val(msg).html(msg) ).val(msg);
                    $("#version").focus();
                });
                $( this ).dialog( "close" );    
            },
            Cancel: function() {
                $( this ).dialog( "close" );
            }
        },
        close: function() {
            $('#version').trigger('change');
        }
    }); 
    return false; 
});



//###### CHANGE ###############
$('#version').change(function() {       
    var promise = getFolders(mypath);
    promise.success(function (data) {
        promise.done(function(msg) {        
            if(msg=="false"){
                //error check   
            } else {
                var myOptions = msg.split(",");
                var mySelect = $('#version');

                mySelect
                    .find('option')
                    .remove()
                    .end();
                $.each(myOptions, function(x,y) {
                    if(x==0){
                        x=-1;
                        y="Select Version";
                        mySelect.append($('<option></option>').val(x).html(y));
                    }
                    else {      
                        mySelect.append($('<option></option>').val(y).html(y));
                    }
                }); 
                mySelect.focus();
            }
        });
    });     
});

我已经提取了大量代码,所以如果括号不合适,这里只是拼写错误,以显示函数的核心。同样,除了调用转换器的加法器之外,两者都可以工作:

关键线是:

close: function() {
            $('#version').trigger('change');
        }

html看起来像

  <select id="version"></select>  <a href="#" id="add">

当模式关闭(或其他地方)时,我希望它触发 onchange 以有效地从源中重新提取(promise ajax 查找,此处未列出的功能......)而不是它现在所做的,这只是附加选项并选择它。

我已经在可能的地方尝试了这个触发代码块,但它仍然不会触发。

那么,我如何伪造来自系统的 onchange 呢?我正在使用 jQuery 和 UI 的现代版本(也许 1 点发布)

4

1 回答 1

1

我认为您在服务器响应之前触发了更改。如果您想在之后触发更改,请让您的 add 方法在“完成”功能中关闭对话框。

 buttons: {
        "Add": function() { 
            var f = $('#folder').val();
            var request = $.ajax({  
                url: "process.it"
                ,  type: "POST"
                ,  data: {  f  : f   }
            });                 
            request.done(function(msg) {
                $("#version").append( $('<option></option>').val(msg).html(msg) ).val(msg);
                $("#version").focus();
                $( this ).dialog( "close" );  
            });

        },

这是一个例子 - http://jsfiddle.net/AMZ3n/2/

于 2013-07-23T21:13:09.963 回答