今日、この問題が発生しました。次の解決方法を開発しました。また
$("select").change(function() {
// Ignore events if the interval has already been established
if (this.interval)
return false;
// Self invoking anonymous function to prevent polution of parent scope
// in some environments (IE), passes 'this' as element
(function (element) {
// Set an interval to watch for the window to close
element.interval = setInterval((function callback() {
// Find the widget
var $widget = $('#'+element.id+'-menu').closest('.ui-selectmenu');
// If it has been closed DO STUFF and clear the interval
if ($widget.hasClass('ui-selectmenu-hidden')) {
// YOUR CODE HERE
clearInterval(element.interval);
}
return callback;
})(), 1000);
})(this);
return false;
});
注目に値するあなたは、AJAXを経由して再ロードするこれらのフォーム要素である場合には、新しいHTMLを挿入する前に、DOMからカスタムウィジェットの要素を削除する必要がありますということです。オプションを動的に更新する方がより洗練されたソリューションになりますが、そのオプションはありませんでした。
$('.ui-selectmenu, .ui-selectmenu-screen, .ui-dialog').remove();
あなたの要素は動的なので、 'bind()'はうまくいかないかもしれません。最も近い静的な親の 'on()'の委譲バージョンを使ってみてください – elclanrs