jQuery事件触发器

时间:2013-07-23 20:39:22

标签: jquery events triggers

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

我添加了一个带有jQueryUI的模态对话框,以便在列表中创建一个新选项。 这也是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以有效地从源中重新提取(承诺ajax查找,此处未列出的函数...)而不是它现在所做的,这是只需将选项附加到列表中并选择它即可。

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

那么,我如何伪造系统中的onchange?我正在使用jQuery和UI的现代版本(可能是1点发布)

1 个答案:

答案 0 :(得分: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/