首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery的2个版本

jquery的2个版本
EN

Stack Overflow用户
提问于 2013-09-06 23:32:54
回答 1查看 148关注 0票数 0

为了一个onclick事件和一个表单post事件,我必须加载两个版本的jquery。onclick事件可以很好地调用http code.jquery.com/jquery-latest.min.js,但是post事件不会工作,除非我调用http code.jquery.com/jquery-1.4.2.min.js和http://code.jquery.com/ajax/jquery.validate/1.7/jquery.validate.min.js,但我必须使用noConflict才能让事情正常工作。

对latest.min的调用将我的onclick事件加载到一个div中,对submitHandler的调用(表单)将我的表单post加载到另一个div中。

菜单由onClick事件操作,并将正确的菜单加载到顶部栏中。然后,用户从该菜单中的下拉列表中进行选择,将表单加载到下面的另一个div中。

表单将被发布,并在表单所在的div中为我显示结果,然后重新加载表单。

加载到div中的表单也包含表单工作所需的代码。

问题是,在它工作过一次之后,如果您尝试发布再次加载的相同表单(与第一个表单相同,包括用于发布表单的代码),它将无法发布

用于发布表单的脚本

代码语言:javascript
复制
$.noConflict();
$(document).ready(function () {
    $("#ncus").validate({
        debug: false,
        submitHandler: function (form) {
            $.post('../AddCusForm/process_form.php', $("#ncus").serialize(), function (data) {
                $('#mainBody').html(data);
                $("#mainBody").find("script").each(function (i) {
                    eval($(this).text());
                });
                $("form#ncus")[0].reset();
            });
        }
    });
});

加载到同一div中的进程表单具有与上面相同的代码。并将原始表单替换为另一个表单(同名)

EN

回答 1

Stack Overflow用户

发布于 2013-09-06 23:37:05

每次调用$.noConflict时,您的代码都会释放$变量。第一次,这将使您恢复到jQuery的一个版本;第二次,它可能使$未定义。

理想情况下,您想要做的是只使用单一版本的jQuery。

有时,由于各种原因,这在短期内是不可能的。对于这些情况:

在一个页面上使用多个jQuery版本的正确方法是使用noConflict的返回值和/或作用域函数。

返回值示例如下:

代码语言:javascript
复制
<script src="jquery-vX.js"></script>
<script src="some-plugin-that-requires-vX.js"></script><!-- (if any) -->
<script>
var $X = jQuery.noConflict(true);
</script>
<script src="jquery-vY.js"></script>
<script src="some-plugin-that-requires-vY.js"></script><!-- (if any) -->
<script>
var $Y = jQuery.noConflict(true);
</script>

然后对jQuery版本X使用$X,对jQuery版本Y使用$Y。请注意,您加载的插件将自身挂接到当时最新版本的jQuery上。

注意上面的顺序:

version.

  • Include version.

  • Then (
  1. )包含您需要与该jQuery一起使用的任何插件的noConflict (Once)文件。

顺序很重要,因为正确编写的插件将使用jQuery符号来挂接自己,因此需要确保在加载插件时jQuery指向正确的版本。

您还可以使用作用域函数,以便可以在该函数中使用带有$的给定版本:

代码语言:javascript
复制
(function($) {
    // Here, $ will be whatever you pass in below, in this example, version X
    $(...).doSomethingWithVersionX();
})($X);
(function($) {
    // Here, $ will be whatever you pass in below, in this example, version Y
    $(...).doSomethingWithVersionY();
})($Y);

如果你不喜欢这个版本被埋藏在底部的方式,这个方法同样有效:

代码语言:javascript
复制
(function() {
    var $ = $X; // <== Note, jQuery version X

    // Here, $ will be whatever you assigned above
    $(...).doSomethingWithVersionX();
})();
(function() {
    var $ = $Y; // <== Note, jQuery version Y

    // Here, $ will be whatever you assigned above
    $(...).doSomethingWithVersionY();
})();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18661398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档