我正試圖擴展jQuery UI Autocomplete小部件。在我的自定義小部件中,我需要能夠覆蓋select事件,同時理想情況下也允許小部件的用戶將其自己的處理程序附加到該事件。擴展jQuery UI小部件 - 覆蓋父項事件?
這裏是我的嘗試之一的的jsfiddle:http://jsfiddle.net/nN46R/
我第一次嘗試(這是在的jsfiddle)是綁定到事件_create
:
$.widget("custom.myautocomplete", $.ui.autocomplete, {
_create: function() {
this._super("_create");
// Doesn't work
this.element.bind('autocompleteselect', function() {
alert('Handling autocompleteselect!');
});
}
});
這沒有奏效。它將觸發如果你改變autocompleteselect
到select
,但只有當你突出顯示文本框內的任何文本 - 但這只是jQuery的select處理程序觸發,而不是jQuery UI的autocompleteselect。不是我想要的。
每this post,我試圖定義窗口小部件內的_select
方法:
$.widget("custom.myautocomplete", $.ui.autocomplete, {
_create: function() {
this._super("_create");
},
_select: function (event, ui) {
alert('Handling select!');
}
});
這也沒有工作。我只用select
(沒有下劃線)嘗試,但沒有運氣。
是工作的唯一的事情就是用options
陣列中的默認處理程序通過,像這樣(jsfiddle):
$.widget("custom.myautocomplete", $.ui.autocomplete, {
options: {
select: function (event, ui) {
alert('Handling select!');
}
}
});
但是,這有幾個問題。首先,它看起來並不像它可以調用自定義窗口小部件的任何其他方法在處理程序中:
$.widget("custom.myautocomplete", $.ui.autocomplete, {
options: {
select: function (event, ui) {
alert('Handling select!');
// Doesn't work:
// Uncaught TypeError: Object #<HTMLInputElement> has no method '_myCustomSelectHandler'
this._myCustomSelectHandler();
}
},
_myCustomSelectHandler: function (event, ui) {
alert('In _myCustomSelectHandler!');
}
});
其次,如果用戶定義自己select
處理程序,那麼該礦將不再觸發:
$("#tags").myautocomplete({
delay: 0,
source: availableTags,
select: function (e, ui) {
alert("Muahaha! Me (the user) just overrode the select handler, and now yours won't get called!");
}
});
因此,這看起來並不像一個解決方案。
那麼,有什麼辦法可以擴展自動填充小部件並覆蓋select
處理程序?
感謝您分享此信息。沒有你的答案,我無法找出原因。 –