0

我必须为 onclick 事件和表单发布事件加载 2 个版本的 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: 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 中的流程表单具有与上面相同的代码。并用另一种形式替换原始形式(同名)

4

1 回答 1

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>

然后$X用于 jQuery 版本 X 和$YjQuery 版本 Y。请注意,您加载的插件将与当时的 jQuery 版本挂钩。

注意上面的顺序:

  1. 包括 jQuery 版本的文件。
  2. 包括您需要与该版本一起使用的任何插件。
  3. 然后使用noConflict(一次)。

顺序很重要,因为正确编写的插件将使用该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();
})();
于 2013-09-06T15:37:05.283 回答