jquery 1.4.4 と jquery-ui 1.8.24 を使用しています。ダイアログがあり、そのダイアログ内にリンクがあります。そのリンクをクリックした後、オートコンプリートで入力をユーザーに表示します。ユーザーがオートコンプリート リストから項目を選択して Enter キーを押すと、すべて正常に動作します。残念ながら、ユーザーがオートコンプリート リストからアイテムを手動でクリックすると、イベント「select」がまったく呼び出されず、ダイアログが即座に閉じます。
また、複数のイベントが DOM 要素にバインドされるのを防ぐために、多くの live() と die() を使用しています。
$j("#" + id + "_selector:not(.ui-autocomplete-input)").die().live("focus", function (event) {
$j(this).autocomplete({
autoFocus:true,
html:true,
create:function() {
// this always invokes
console.log('autocomplete created');
},
source:function (request, response) {
var term = request.term;
if (term in cache) {
response(cache[term]);
return;
}
request.kind = settings.kind
request.no_email_display = settings.no_email_display
lastXhr = $j.getJSON(Routes.search_account_path().url, request, function (data, status, xhr) {
cache[ term ] = data;
if (xhr === lastXhr) {
response(data);
}
});
return false;
},
select: function(event, ui) {
// this one works only after selecting by keyboard and hitting entery key
var origEvent = event;
while (origEvent.originalEvent !== undefined)
origEvent = origEvent.originalEvent;
console.log(origEvent);
},
});
});
私が疑っているのは、ダイアログがオートコンプリートから何らかの形でクリックイベントを引き継ぐことです。
このバグを再現することはほとんど不可能であることがわかっているので、少なくともこのエラーをデバッグする方法 (ツール、firebug、ブレークポイントの設定方法など) を誰かが助けてくれれば、私はとても幸せです。