Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 附加JQuery检测小部件_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 附加JQuery检测小部件

Javascript 附加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();

我有一个web应用程序,其中包含中等数量的ajax请求

我在head上加载所有jquery和jquery小部件,然后在close body标记之前加载base.js

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类点击按钮打开多个对话框时。