jquery没有对班级变化做出反应?

时间:2014-12-01 01:23:22

标签: javascript jquery

所以我完成了这项任务,我必须这样做,它与圣诞树有关,你可以点击树枝,把它们变成饰物和诸如此类的东西。 当树打开时,你不应该改变装饰品。 到目前为止,我已经得到了这个jquery:

$('.branch1, .ornament1, .light1').click(function() 
{
    alert("WARNING - Power off the tree first!");
    die();
});

$('.branch, .ornament, .light').click(function() 
{                             
    this.className = 
    {
       light : 'branch', branch: 'ornament', ornament: 'light'
    }[this.className];
});

$('#treePowerButton').click(function() 
{
    $(".branch, .branch1").toggleClass("branch branch1");
    $(".ornament, .ornament1").toggleClass("ornament ornament1");
    $(".light, .light1").toggleClass("light light1");
    $(".powerStatus, .powerStatus1").toggleClass("powerStatus powerStatus1");
});

$('#treeClearButton').click(function() 
{
    $(".ornament").toggleClass("ornament branch");
    $(".light").toggleClass("light branch");
});

但是当我打开树并单击一个分支或装饰时,它不会抛出警报,它只会使被点击的项目完全消失。我做错了什么?

这里是一个jsfiddle:http://jsfiddle.net/a1smjgrv/

1 个答案:

答案 0 :(得分:1)

精炼答案:

试试这个jsfiddle:http://jsfiddle.net/a1smjgrv/5/。它将完成您正在寻找的内容,并且比尝试在同一元素上绑定多个单击事件简单得多。


原始答案:

问题是,当页面加载时,没有任何' branch1',' ornament1'或' light1'页面上的元素,因此包含alert()的click事件不会绑定到任何内容。只有'分支'页面上的元素,因此分支的点击事件都是绑定的。

当树电源打开时,'分支'元素被更改为' branch1' class,包含className更新的click事件仍附加到该元素。因此,当它尝试根据您的对象文字更新类名时({light:' branch&#39 ;, branch:' ornament'等等...}),它可以&#39 ;找到任何一个匹配,因为给定元素的类名现在是' branch1'而不是'分支',所以它将元素上的类名设置为“未定义”' (因此,失踪)。

如果希望在将元素呈现给页面的任何时间点将函数绑定到元素,则需要在文档级别绑定它。如下所示:

$(document).on('click', 'branch1', function() {
  alert('SHAZAM!');
});