jQuery函数调用两次

时间:2014-01-16 17:50:57

标签: javascript jquery

我有这个jquery代码,一旦我调用它,函数的第一部分就会启动,但之后就是第二部分启动了;这就像if语句不起作用。我的代码有问题吗?

$(".pinPane").click(function() 
{
    if ($('.pinPane').hasClass('open')) 
    {
        var htable = $('#content-panel-content').height();
        var wtable = $('#content-panel-content').width();
        var panew = wtable - 2;
        var paneh = htable * 0.7;
        var tableh = htable * 0.3;
        $('.pane')
            .height(paneh)
            .width(panew)
            .addClass('panepinned')
            .removeClass('shadow');
        $('#content-panel-content').height(tableh);
        $('.pinPane').addClass('cls').removeClass('open');
    } 
    else 
    {
        $('#content-panel-content').css('height', '100%');
        $('.pane').css('height', '100%').css('height', '-=200px');
        $('.pane').css('width', '100%').css('width', '-=40px');
    };
});

2 个答案:

答案 0 :(得分:0)

而不是:

 $('.pinPane').addClass('cls').removeClass('open');

使用:

 $(this).addClass('cls').removeClass('open');

与第一种情况一样,它将从类pinpane的所有元素中删除类。一旦你删除了类,那么其他代码将被执行,因为它现在不包含开放类。

如果它的调用两次则可能是事件传播的情况。你可以通过以下方式阻止它:

$(".pinPane").click(function(event) 
{
   event.stopPropagation();
   //rest of your code
 }

答案 1 :(得分:0)

  

它就像if语句不起作用

根据您的需要,click处理程序中的以下代码行可能会产生意外结果:

if ($('.pinPane').hasClass('open'))

基本上,您检查是否有.pinPane个班级open;你不想只检查引发.pinPane事件的click吗?如果是这样,请将其更改为:

$(".pinPane").click(function() 
{
    if ($(this).hasClass('open')) { //note this here
    } else {
    };
});