2013-07-23 153 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