javascript - jQuery 类选择器在类更改后不选择

标签 javascript jquery class button jquery-selectors

我正在使用 Javascript 构建一个按钮点击和益智冒险游戏。游戏将允许一系列按钮命令。单击“go”命令时,按钮变为不同的退出,类变为退出,如下所示:

function setExitButtons(){
    clearButtons();
    for (var i = 0; i < player.currentRoom.exits.length; i++) {
            var buttoni = button[i];
            buttoni.className = "exit";
            buttoni.innerHTML = player.currentRoom.exits[i].name;
            $(buttoni).show();
    }

}

其中 clearButtons 隐藏了所有按钮,因此只显示正确的按钮,而 button[] 是按钮的节点列表。

调用此函数时,类确实发生了变化。

然后我有另一个带有类选择器的 jquery 函数,如下所示:

$(".exit").click(function(){
          //roomchangefunction
});

单击具有退出类的按钮时,不会激活 .exit 函数。我有一个包含整个部分的文档就绪功能。想法?

最佳答案

这只会在文档加载时运行一次:

$(".exit").click(function(){
    //roomchangefunction
});

那时.exit没有匹配的元素。所以没有分配点击处理程序。之后,它再也不会运行了。

由于元素是动态变化的,我建议将点击处理程序绑定(bind)到公共(public)父元素 using .on() instead .像这样:

$(document).on('click', '.exit', function () {
    //roomchangefunction
});

不同之处在于,点击事件实际上分配给了一个共同的父元素(在本例中为 document,尽管任何共同的父元素都可以工作,例如 div,它总是包含 .exit 元素)。当一个元素被点击时,“click”事件发生在那个元素上,一直到 DOM。所以这个处理程序将被调用。第二个参数是一个过滤器,因此它会在调用处理函数时查找与该过滤器匹配的元素。

这样,.exit 的过滤器会在单击元素时发生,而不是在加载文档时发生,因此仍会处理在文档生命周期内动态更改的元素。

关于javascript - jQuery 类选择器在类更改后不选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874235/

相关文章:

javascript - 为什么要使用 Angular Service 来收集信息,而不仅仅是 $http?

javascript - 单击 jQuery 启用图像裁剪

javascript - (jquery) 防止 div 在页面加载期间显示

iphone - 如何比较两个 NSObject 的结构/属性的相等性

javascript - Google 表格中的倒数计时器

javascript - 创建元素然后删除元素

javascript - 在 AngularJS 单元/集成测试中向 HTTP 服务器发出真实请求

javascript - 使用 HTML 输入禁用键盘并允许扫描仪

c++ - 使用类 Visual C++ 2010

JavaScript:如何引用类的顶部/根?