2个版本的jquery

时间:2013-09-06 15:32:54

标签: jquery ajax forms post

为了进行onclick事件和表单发布事件,我必须加载2个jquery。 onclick事件可以通过调用http code.jquery.com/jquery-latest.min.js来正常工作,但是除非我调用http code.jquery.com/jquery-1.4.2.min.js和{{{i},否则post事件将无效。但是我必须使用noConflict才能让事情发挥作用。

对latest.min的调用使我的onclick事件加载到div中 对submitHandler:function(form)的调用是我的表单帖子,它加载到另一个div。

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

表单已发布,并在表单所在的div中显示结果并重新加载表单。

加载到div中的表单也包含表单的代码。

问题是它曾经工作过一次,如果你试图发布再次加载的相同表单(与第一个相同,包括发布表单的代码)它无法发布

用于发布表单的

脚本

$.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中的进程表单具有与上面相同的代码。并用另一种形式(同名)替换原始表格

1 个答案:

答案 0 :(得分:2)

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

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

有时因各种原因在短期内无法实现。对于那些情况:

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

这是返回值示例:

<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。

请注意以上事项的顺序:

  1. 包含jQuery版本的文件。
  2. 包含您需要与该版本一起使用的所有插件。
  3. 然后使用noConflict(一次)。
  4. 顺序很重要,因为正确编写的插件会使用jQuery符号自行挂钩,因此您需要确保jQuery在加载时指向正确的版本插件。

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

    (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);
    

    如果您不喜欢版本埋在底部的方式,那么也可以这样做:

    (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();
    })();