我有一个编写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,触发器事件会在加载时停止工作。
任何人都可以帮我解决这个问题吗?
谢谢
答案 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部件。