2013-07-23 30 views
0

我有一个onchange侦听器的选择框。当人类使用它时,这个功能是100%。jQuery事件触发器

我已经添加了一个模式对话框与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,以便有效地从源代码(promise ajax lookup,函数未在此处列出...)中重新提取,而不是现在执行的操作,它只是将选项附加到列表中并将其选中。

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

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

+0

你是不是想请求完成后触发的变化? – Gunner4Life

+0

是的,添加新选项后,我希望更改事件触发。 – briansol

回答

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/

+0

是。我有一个'比赛条件'在我放置的地方添加了一个警报,并允许它显示。把它搬到完成的伎俩。谢谢! – briansol