Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery在父类上单击事件;突出显示“;_Jquery_Click - Fatal编程技术网

Jquery在父类上单击事件;突出显示“;

Jquery在父类上单击事件;突出显示“;,jquery,click,Jquery,Click,尝试在“highlight”的父级上添加单击事件。正确添加和删除类,但单击事件在关闭的addClass之后停止 $(function () { $(".open").click(function () { $('#rslide').animate({ right: '-375px' }, 400); $(this).removeClass('open'); $(this).addClass('clos

尝试在“highlight”的父级上添加单击事件。正确添加和删除类,但单击事件在关闭的addClass之后停止

$(function () {
    $(".open").click(function () {
        $('#rslide').animate({
            right: '-375px'
        }, 400);
        $(this).removeClass('open');
        $(this).addClass('close');
    });
    $(".close").click(function () {
        $('#rslide').animate({
            right: '0px'
        }, 400);
        $(this).removeClass('close');
        $(this).addClass('open');
    });
});

当代码运行时,您的代码将仅将事件绑定到当前与选择器匹配的元素

可以使用将事件绑定到与选择器匹配的元素


我已经将
$(this)
放入一个变量中,以避免在jQuery对象中重复包装
this
,但您可以改为链接:
$(this).removeClass('close').addClass('open')

当您在相同元素上使用这两个类时,您的代码是冗余的,不需要“实时”事件

由于我们不使用“live”事件,jquery将永远不会更新选择器所针对的元素,因此如果将来它们与原始选择器不匹配,则单击事件将继续对它们进行处理

$(".open").click(function(){
    alert("click!");
}).removeClass("open");
对于您的具体情况,首先您需要为所有元素设置一个选择器,如果在开始时所有元素都已打开,请使用$(“.open”)如果是mixin,请使用$(“.open.close”),当然,必须有一个更好的选择器,如$(“#parent>article”),只需检查html即可

这里我们没有得到您的html,所以我假设它是一个mixin,$(“.open,.close”)

我们需要检查当前类并执行不同的操作,jquery get函数检查一个类

$(this).hasClass("open");

=>

使用您当前的代码:

$(".open, .close").click(function(){
    var $t = $(this);
    var isOpen = $t.hasClass("open");

    if(isOpen){
        $('#rslide').animate({right:-375},400);
        $t.removeClass('open').addClass('close');
    } else {
        $('#rslide').animate({right:0},400);
        $t.removeClass('close').addClass('open');
    }
});
但它仍然是一些重要的代码,让我们进一步简化:

$(".open, .close").click(function(){
    var $t = $(this);
    var isOpen = $t.hasClass("open");
    $('#rslide').animate({right:(-375*isOpen)},400);
    $t.toggleClass('open').toggleClass('close');
});
toggleClass当然不是很好,它必须在检查类之前,尝试删除它

$(".open, .close").click(function(){
    var $t = $(this);
    var isOpen = $t.hasClass("open") * 1;
    var cls = ["open","close"];
    $('#rslide').animate({right:(-375*isOpen)},400);
    $t.removeClass(cls[!isOpen]).addClass(cls[isOpen]);
});

您可以为此创建JSFIDLE或发布HTML吗?请尝试
$(文档)它可以很好地工作,但在优化条件下。在这里,on当然是不必要的
$(".open, .close").click(function(){
    var $t = $(this);
    var isOpen = $t.hasClass("open");

    if(isOpen){
        $('#rslide').animate({right:-375},400);
        $t.removeClass('open').addClass('close');
    } else {
        $('#rslide').animate({right:0},400);
        $t.removeClass('close').addClass('open');
    }
});
$(".open, .close").click(function(){
    var $t = $(this);
    var isOpen = $t.hasClass("open");
    $('#rslide').animate({right:(-375*isOpen)},400);
    $t.toggleClass('open').toggleClass('close');
});
$(".open, .close").click(function(){
    var $t = $(this);
    var isOpen = $t.hasClass("open") * 1;
    var cls = ["open","close"];
    $('#rslide').animate({right:(-375*isOpen)},400);
    $t.removeClass(cls[!isOpen]).addClass(cls[isOpen]);
});