わかりました、より明確になると思うので、投稿を再編集しています。
グリッドビューなどを含む ASP.net ページがあります。
グリッドビューの結果行には、クリックするとモーダル ポップアップ ウィンドウ (基本的にはクリック時に表示される非表示の div) が開くイメージがあります。
そのモーダルは、表示されるように、2 列のテーブル、列 1 はテキスト行のみ、列 2 は空のドロップダウン リストとチェック ボックスの組み合わせを持つ ajax/json によって動的に読み込まれます。(これらはすべて、メイン ページの読み込み後に DOM に追加されます。 )。
ユーザーがクリックしたときに ajax/json を介して利用可能なチェックリストを設定しようとしていますが、これは最初のクリックでのみ発生し、ユーザーがその後そのドロップダウンを何回クリックしても (焦点が外れて戻った後)同じことが繰り返されるのを見たくありません。
ドロップダウンがクリックされたとき、つまりドロップダウンが入力されたときに現在機能するコードは次のとおりです。問題は、フォーカスを失ってからドロップダウンを再度クリックすると、次の重複したリストが再入力されることです。
<code>
$('#FSSiteName').live('focus', function () {
var $this = $(this);
getFSSites();
//i thought the below line would stop it happening again when i click on the dropdown
$this.unbind('focus');
});
function getFSSites() {
var ddSites = $("#FSSiteName");
$.ajax({
type: "POST",
url: "Circuits_OrderManagementTracker.aspx/getTheSitesList",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var xmlDoc = $.parseXML(response.d);
var xml = $(xmlDoc);
var FSSitesReturned = xml.find("Table");
$.each(FSSitesReturned, function (index, FSSitesReturned) {
dbname = $(this).find("SiteNames").text()
ddSites.append('<option>' + dbname + '</option>');
});
},
failure: function (msg) {
alert(msg);
}
});
}
</code>
私はあなたの善意による提案で以下のコードに変更しましたが、以下を行うとドロップダウンリストが読み込まれなくなり、同じ効果をもたらす .one() も試しました。
<code>
$('#FSSiteName').on('click', function () {
var $this = $(this);
//run your alert here if it´s necessary
//alert('Focused for the first time :)');
getFSSites();
//unbind the event to prevent it from being triggered again
$this.off('click');
});
</code>
これが、助けたい人にとって少し明確になることを願っています。