我必须加载2个版本的jQuery,以便进行onClick事件和表单POST事件。onclick事件可以调用http code.jquery.com/jQuery-latest.min.js,但除非我将http code.jquery.com/jQuery-1.4.2.min.js称为a,否则POST事件将无法工作。 http://code.jquery.com/ajax/jquery.validate/1.7/jquery.validate.min.js但我必须确保两个版本无冲突才能让事情正常运作。
对latest.min的调用使onClick事件加载到了div中,而对submitHandler:function(Form)的调用使我的表单POST工作,后者加载到另一个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中的进程表单具有与上面相同的代码,并将原始表单替换为另一个表单(同名)。
Your code is releasing the $
variable each time $.noConflict
is called. The first time, that reverts you back one version of jQuery; the second time, it probably makes $
undefined.
Ideally, what you want to do is use only a single version of jQuery.
Sometimes for various reasons that's not possible in the short term. For those situations:
The correct way to use multiple jQuery versions on a page is to use the return value from noConflict
and/or a scoping function.
Here's the return value example:
<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>
Then use $X
for jQuery version X, and $Y
for jQuery version Y. Note that the plugins you load will hook themselves up to the then-current version of jQuery.
Note the order of things above:
noConflict
(once).The order is important because a properly-written plug-in will use the jQuery
symbol to hook itself up, so you need to make sure that jQuery
is pointing at the right version when you load the plug-in.
You can also use a scoping function so you can use a given version with $
within that function:
(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);
If you don't like the way the version is buried at the bottom, this works just as well:
(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();
})();