2010-07-24 80 views
1

我正在使用jQuery Tokenizing自动完成插件(http://github.com/loopj/jQuery-Tokenizing-Autocomplete-Plugin),并使用$('选择器')在客户端创建新的输入类型。方法。当我这样做时,新创建的元素不使用插件。在添加新元素后绑定自定义事件

初始输入标记化这样

$('.recipe_ingredient').tokenInput('/ingredients/index.json', { 
    hintText: 'Type in an ingredient like Tuna, Chicken...', 
    tokenLimit: 1, 
    onAdded: ingredient_added, 
    onRemoved: ingredient_removed, 
}); 

任何新的输入类型选择匹配没有得到标记化,任何想法?我迷失在语法中。

编辑

我最后做这样

clickedContainer.after('html'); 

$('#total-i-forms').attr('value', count); 

var ri = clickedContainer.next().find('.recipe_ingredient'); 

ri.tokenInput('/ingredients/index.json', { 
    hintText: 'Type in an ingredient like Tuna, Chicken...', 
    tokenLimit: 1, 
    onAdded: ingredient_added, 
    onRemoved: ingredient_removed, 
}); 

东西是这种方法优于实况查询?

+0

您的解决方案的一个好的替代方法是做你所做的事情,但*之前*你追加新的'html'内容。像:'var $ newContent = $('yourHTML'); $ newContent.find( 'recipe_ingredient。')tokenInput(...)。 clickedContainer.after($ newContent);' – user113716 2010-07-24 19:40:49

回答

0

可以使用.livequery() plugin此:

$('.recipe_ingredient').liveQuery(function() { 
    $(this).tokenInput('/ingredients/index.json', { 
    hintText: 'Type in an ingredient like Tuna, Chicken...', 
    tokenLimit: 1, 
    onAdded: ingredient_added, 
    onRemoved: ingredient_removed, 
    }); 
}); 

,积极寻找加到匹配选择并运行在其上的回调函数的DOM新的元素。认为.each(),但它会继续运行以添加新元素。

0

您需要将其绑定到任何新输入。运行插件方法的时候,它仅将它绑定到那个时候在DOM中存在的那些元素。

+0

不幸的是,你不能使用'.delegate()'或'.live()'这样的插件......它们严格用于事件处理,并且通过冒泡,而不是添加元素:) – 2010-07-24 19:26:54

+0

是的,我在$('选择器')后添加了相同的代码('html')。它工作正常。这个方法比livequery插件更受欢迎吗? – iJK 2010-07-24 19:29:14

+1

@iHeartDucks:如果你将代码放在后面,它将再次运行插件*,用于以前运行的元素,所以你拥有的元素越多,它越糟糕......你最好专门运行它创建的元素或使用'.livequery()'。 – 2010-07-24 19:31:46

相关问题