2012-01-04 54 views
0

我很抱歉,如果这已被问过,但我是那种在困境中。我创建了一个JavaScript函数动态添加表单输入当用户集中在一个特定的HTML文本输入(因为我们已经接受多个值的选项)。我认为这样做比从下拉菜单中选择你需要的输入量要容易得多。JQuery的不更新:最后一个过滤器的动态添加元素

这里是我如何去增加新的表单输入:

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

当我刷新页面,并注重与“roe0”的ID,最初的文字输入,JQuery的生成一个新的输入刚我希望如何。但是,当我专注于新生成的输入时,没有任何反应。然后我必须回头注意原始$(#roe0)输入以生成新的文本输入。

有谁知道解决这个吗?任何和所有的帮助将不胜感激!

回答

1

那么,事情是,你选择一个元素(当页面加载的最后一个),并附加一个事件处理它。然后,没有其他任何事情完成了,所以你创建的任何新元素都不会有事件处理。

我会做的是这样的:

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会很好。它将分离事件处理程序,一旦它执行一次(这是很好的,因为新的元素应该是一个与现在的事件处理程序)

2

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

+0

啊,这使得有很大的意义。我以前不知道'.one()'事件,但它看起来完全像我需要的。谢谢您的回答! – 2012-01-04 02:39:46