加载时jQuery触发器

时间:2014-02-28 08:10:22

标签: javascript jquery api

我有一个编写API的项目,客户端会将我的代码放入他的HTML中。例如:

<script>
jQuery(document).ready(function ($) {
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = "test.js";
    // Use any selector
   $("body").append(s);
});
</script>

我在输入上附加了一些事件,例如:

$(document).on("change", "input", function () {})

当我触发更改事件时,它可以工作,但是当客户端加载另一个jQuery库时,它会在我的代码之后加载AJAX,触发器事件会在加载时停止工作。

任何人都可以帮我解决这个问题吗?

谢谢

3 个答案:

答案 0 :(得分:2)

您可以向客户端指定,如果他们加载jQuery,他们必须在您的脚本之前这样做,以便您的脚本可以使用他们的jQuery。

或者,您可以使用jQuery.noConflict将自己的jQuery加载到其他命名空间中:https://api.jquery.com/jQuery.noConflict/

答案 1 :(得分:0)

<script>
jQuery_my_version = jQuery.noConfilict();
jQuery_my_version (document).ready(function ($) {
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = "test.js";
    // Use any selector
   $("body").append(s);
});
</script>

然后在其他地方附加您的输入,但不使用$。

<script>
jQuery_my_version(document).on("change", "input", function () {})
</script>

但最佳实践是,当我们使用许多使用$的库的jQuery版本时,将使用匿名函数包装所有代码,例如

(function($){
   //my super code
})(jQuery_my_version)

因为 $ 更容易理解(读取,打字等),并且必要的jQuery版本安全地使用。

答案 2 :(得分:-1)

这是jQuery的问题。页面上只有1个jQuery库。 如果您可以与客户交谈并设置eqal jQuery版本,您和您的客户端可以以这种方式加载jQuery库:

<script type="text/javascript">

       var jQueryScriptOutputted = false;
       function initJQuery() {

             //if the jQuery object isn't available
             if (typeof (jQuery) == 'undefined') {

                    if (!jQueryScriptOutputted) {
                           //only output the script once..
                           jQueryScriptOutputted = true;

                           //output the script
                           document.write("<scr" + "ipt type=\"text/javascript\" src=\"/_layouts/Scripts/jquery-1.8.2.min.js\"></scr" + "ipt>");
                    }
                    setTimeout("initJQuery()", 50);
             }

       }
       initJQuery();

</script>

它有助于我在sharepoint,有时我在页面上有1个Web部件,有时我在同一页面中有2-6个Web部件。