2012-03-22 29 views
1

我試圖保持觸發使用這兩行代碼中的一個事件的控件:的jQuery UI部件「變」事件

this.element.trigger('change'); // or... 
stop: function (event, ui) { that.element.change(); } 

字「變」中的代碼只出現4次,以上述兩種形式之一。但是,我不知道這裏發生了什麼。在變更調用中沒有事件處理程序,並且沒有綁定,委託,或實時調用,因此可以設置外部事件。任何人都可以填補我嗎?有沒有關於此的文檔?謝謝。

回答

2

這兩行代碼只是使用兩種不同的允許語法將更改事件觸發到this.element

使用.trigger()

this.element.trigger('change'); 

或使用速記方法.change()

that.element.change(); 

實際上,你可以綁定一個事件處理程序通過this.element代表來處理這個事件的元素。


不知道你的插件,它是很難準確地回答你的是什麼this.element

但以自動完成插件爲例。在這其中,this.element實際上是自動填充插件應用於的輸入字段。如果更改事件被觸發像你的問題理應做,你可以一個事件處理程序綁定到這樣的輸入:

$('#myinput') 
    .autocomplete() 
    .bind('change', function() { }); 

現在,如果這個插件依賴於jQuery UI Widget Factory,最好是使用方法_trigger()觸發事件而不是jQuery .trigger()。

使用_trigger()將確保使用正確的上下文執行插件選項中定義的任何回調,並且還會爲this.element(如上所述)觸發該事件。所以,你可以有:

$('#myinput') 
    .somePlugin({ 
     change: function(e, someData) { 
      // "this" here will be `this.element´ 
     } 
    }) 
    .bind('change', function() { ... }); 
0

答案竟然是簡單的 - 沒有任何事件處理程序,沒有綁定的/ etc電話,jQuery不會在幕後沒有什麼,所以觸發器調用什麼也沒做。我評論他們和小部件的行爲完全一樣。衛生署。