JQuery没有't更新:动态添加元素的最后一个筛选器

JQuery Doesn't Update :last Filter for Dynamically Added Elements

本文关键字:元素 添加 最后一个 筛选 动态 没有 更新 JQuery      更新时间:2023-09-26

如果以前有人问过这个问题,我很抱歉,但我有点不知所措。我正在创建一个JavaScript函数,以便在用户关注特定HTML文本输入时动态添加表单输入(因为我们可以选择接受多个值)。我认为这样做比从下拉菜单中选择所需的输入量更容易。

以下是我如何添加新的表单输入:

$("input[type=text]").filter(":regex(id, roe[0-9])").filter(":last").on("focus", function() {
    // Add in new elements here
}

当我刷新页面,并专注于ID为"roe0"的初始文本输入时,JQuery会按照我的意愿生成一个新的输入。然而,当我专注于新生成的输入时,什么都没有发生。然后,我必须重新关注原始的$(#roe0)输入,以生成新的文本输入。

有人知道解决这个问题的办法吗?我们将非常感谢您的任何帮助!

它将只应用一次,并在应用时应用于最后一个元素。您需要将其重新应用于新创建的元素。这将是一个使用jQuerys .one()事件绑定器的好情况。因为一旦事件第一次触发(一次),就必须删除元素上的绑定。

好吧,事情是你选择一个元素(加载页面时的最后一个),并将事件处理程序附加到它上。然后什么都不做,所以你创建的任何新元素都不会有这种事件处理是有道理的。

我想做的是这样的事情:

function createNewElement(e) {
    var newElement = jQuery('<input />');
    // Whatever logic you have to append the new input and such
    newElement.one("focus", createNewElement);
}
$("input[type=text]").filter(":regex(id, roe[0-9])").filter(":last").one("focus", createNewElement);

这样,当你创建一个新元素时,你就把同一个事件处理程序附加到它上

正如在另一个答案中所说,使用one而不是on将是好的。一旦执行一次,它就会分离事件处理程序(这很好,因为新元素现在应该是带有事件处理程序的元素)