好的,我正在重新编辑我的帖子,因为我认为它可能会更清楚。
我有一个带有gridview 等的ASP.net 页面。
在 gridview 的结果行上是一个图像,单击该图像会打开一个模式弹出窗口(基本上是单击时显示的隐藏 div)。
该模式看起来是由一些带有 2 列表的 ajax/json 动态填充的,第 1 列只是文本行,第 2 列是空下拉列表和复选框的组合。(这些都在主页加载后添加到 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>
希望这对任何希望提供帮助的人来说更清楚一些。