Javascript 附加JQuery检测小部件
我有一个web应用程序,其中包含中等数量的ajax请求 我在head上加载所有jquery和jquery小部件,然后在close body标记之前加载base.jsJavascript 附加JQuery检测小部件,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个web应用程序,其中包含中等数量的ajax请求 我在head上加载所有jquery和jquery小部件,然后在close body标记之前加载base.js function baseScripts() { $(".open-dialog").click(function (event) { event.preventDefault(); event.stopPropagation();
function baseScripts() {
$(".open-dialog").click(function (event) {
event.preventDefault();
event.stopPropagation();
alert("Opening dialog");
href = $().buildUrl($(this).attr("href"), "&isAjax=true");
$().createDialog(href, "Window Title");
return false;
});
$("input:hidden.select").each(function () {
var element = $(this);
if (!($("#s2id_" + element.attr("id")).length)) {
$(element).select2({
// select2 properties...
});
}
});
}
}
脚本块,用于在每个AJAX请求上加载基本脚本
$(document).ajaxComplete(baseScripts);
问题在于,每次ajax请求后,都会再次调用基本脚本,并多次打开对话框和附加select2
如何检测小部件是否已附加到元素或类中?
在每个ajax请求上执行脚本(就像我做的那样)这是一个糟糕的做法?如果您想重新绑定click事件并在
ajaxComplete
上选择2,这是没有意义的。它们应该是一次性绑定,在这种情况下,您可以执行以下操作:
$(document).ready(function(){
baseScripts();
function baseScripts() {
$(".open-dialog").click(function (event) {
event.preventDefault();
event.stopPropagation();
alert("Opening dialog");
href = $().buildUrl($(this).attr("href"), "&isAjax=true");
$().createDialog(href, "Window Title");
return false;
});
$("input:hidden.select").each(function () {
var element = $(this);
if (!($("#s2id_" + element.attr("id")).length)) {
$(element).select2({
// select2 properties...
});
}
});
}
});
设置标志或数据属性每个ajax请求都不能从以前包含的脚本中访问,即使在头部或正文关闭之前。所以我应该再次加载,或者在每次ajax请求中再次调用所有脚本。发出ajax请求不会重新加载页面。因此,如果您在进行ajax调用之前调用了
baseScripts()
(如我所述),您的打开对话框的单击事件绑定,并且select2
实例化应该在ajax调用后保持不变。是的,它们会保持不变!问题是,如果已经绑定,则对话框将打开两次@Trxplz0听起来问题出在代码的其他地方。你能用完整的js代码更新你的帖子吗?我想你遗漏了一些细节。如果它们很多,你可以通过gmail的ihcsim给我发电子邮件。我在html头上包含了所有脚本(jquery、jquery ui、select2),那么在html正文关闭之前,我只有这段代码。当我执行ajax请求时,他们可以访问jquery或选择2(插件),除非我再次包含jquery或在每个绑定两次单击事件的ajaxComplete上调用此baseScripts。。。所以当我用.opendialog类点击按钮打开多个对话框时。