onClick切换类问题

时间:2013-05-02 15:18:37

标签: jquery

我所拥有的是<div#graphicsCloseBox>嵌套在<div#catbox>内。 它应该是当你点击时,班级会改变回来。 我不能使用toggleClass,因为框内有一个表单输入,所以单击表单会搞砸。

 $('#catbox').click(function() {
        $(this).removeClass('cat');
        $(this).addClass('cat2');
});
$('#graphicsCloseBox').click(function() {
    $('#catbox').removeClass('cat2');
    $('#catbox').addClass('cat');
});

如果您想要一个示例检查http://codepen.io/rtro92/pen/mihlu 但这非常简单。 我知道我的问题是在第二个功能,我只是无法定位#catbox。 谢谢!

4 个答案:

答案 0 :(得分:6)

你点击事件正在冒泡到外面的DIV。

使用.stopPropagation()

$('#catbox').click(function() {
        $(this).removeClass('cat');
        $(this).addClass('cat2');
});
$('#graphicsCloseBox').click(function(event) {
    $('#catbox').removeClass('cat2');
    $('#catbox').addClass('cat');
    event.stopPropagation();
});

答案 1 :(得分:4)

你的问题可能是event propagation(又名“冒泡”),这是一个DOM元素中的事件向其所有父母“起泡”的功能,除非明确告知事件不这样做。 / p>

换句话说,当有人点击<div#graphicsCloseBox>时,会按照您的指定正确添加和删除这些类。然后直接触发click <div#catbox>上的<div>事件,因为它会重置类 - 撤消点击内部$('#graphicsCloseBox').click(function(evt) { // your other stuff evt.stopPropagation(); return false; }); 的效果。

要解决此问题,请使用.stopPropagation()

return false

它应该在没有{{1}}的情况下工作,但由于大多数浏览器都可以使用“虚假”返回值来防止冒泡,所以无论如何我经常把它塞进去。

答案 2 :(得分:0)

进行此更改:

$('#graphicsCloseBox').click(function(e) {
    e.stopPropagation();  //<---This stops it from bubbling up, toggle now works.
    $('#catbox').removeClass('cat2');
    $('#catbox').addClass('cat');
});

答案 3 :(得分:0)

看起来你正在处理事件冒泡 - 单击#graphicsCloseBox也会触发#catbox上的点击操作。尝试阻止事件冒泡。

$('#graphicsCloseBox').click(function(e) {
    e.stopPropagation();
    $('#catbox').removeClass('cat2');
    $('#catbox').addClass('cat');
});