Jquery - 脚本是冲突的

时间:2014-02-05 18:00:32

标签: javascript jquery html conflict

在我的父页面中,我使用jquery来操作选项卡区域,并将内容(prices.php)加载到其中一个选项卡中。这是该页面上的脚本:

$(document).ready(function() {
    $("#tabcontent > div").hide(); // Initially hide all content
    $("#tabs li:first").attr("id","current"); // Activate first tab
    $("#tabcontent div:first").fadeIn(); // Show first tab content

    $('#tabs a').click(function(e) {
        e.preventDefault();
        if ($(this).closest("li").attr("id") == "current"){ //detection for current tab
         return       
        }
        else{             
        $("#tabcontent > div").hide(); //Hide all content
        $("#tabs li").attr("id",""); //Reset id's
        $(this).parent().attr("id","current"); // Activate this
        $('#' + $(this).attr('name')).fadeIn(); // Show content for current tab
        }
    });
$('#prices').load('../prices_test.php?hid=<?php echo $hid;?>');
});

price.php还使用Jquery在单击按钮时显示隐藏区域。由于按钮位于可能重复多次的do循环内,我使用$ i并在循环中包含脚本:

<td height="30px" colspan="3" align="right" style="padding-right:20px">
    <a href="javascript:void()" class="click<?php echo $i ?> buttonSearchList">&nbsp;&nbsp; Enquire or Book</a>
    <script>
        $("a.click<?php echo $i ?>").click(function() {
            $(".hiddenstuff<?php echo $i ?>").slideDown(1000),
            $("a.click<?php echo $i ?>").fadeOut(500);
        });
    </script>
</td>
</tr>
</table>
<div class="hiddenstuff<?php echo $i ?>" style="display:none">
<-- Content of "hiddenstuff" -->
当我直接在浏览器中运行prices.php时,

Hiddenstuff会正确显示,但当它是父页面的一部分时则不会。因此我假设两个脚本之间存在冲突。父页面包括

$('#tabs a')

并且有

$("a.click<?php echo $i ?>")

in prices.php。这些相互矛盾吗?如果是这样,我该如何预防呢?我试过在a.click$i附近增加一个课程,但这没有帮助。

解 我将脚本从ajax加载页面移动到父页面,并将第一行重写为:

$("#prices").on('click', 'a.click', function() {

我必须删除“$ i”位,因此只要单击其中一个,脚本就会对代码的所有实例起作用。我不想这样离开,但我正在为Mk2版本保存。感谢所有回复的人。

1 个答案:

答案 0 :(得分:0)

如果将2个或更多jQuery导入到您的页面上,则每个实例都可以覆盖以前加载的命名空间。根据内容的加载方式以及加载其他版本的时间,较新的文件可能会覆盖事件绑定的$ namespace。查看noConflict()功能。这个人可以做一些事情,他可以完全从全局上下文中删除jQuery实例并将其推送到本地var。

var jQ = jQuery.noConflict(true);
jQ('.someClass').click(function(){
   // do stuff
});

或者它可以简单地删除对$快捷方式的依赖。这意味着当我们想要引用该版本的jQuery时,我们需要使用jQuery而不是$

$.noConflict();
jQuery('.someSelector').click(function(){
   // more stuff doing
});