jQuery - 如何为ajax添加的元素调用/绑定jquery事件?

时间:2012-12-06 18:17:46

标签: ajax jquery

我正在开发jQuery插件Tag-it!的实现,其中包含用于为不同类型的产品(笔记本电脑,电视,小工具等)分配属性的产品条目表单。

概念如下: 添加新产品时,首先,用户从正在添加的产品的下拉列表中选择产品类别,并触发jQuery .change()事件,进行ajax调用以获取与该类别相关的所有属性。例如,如果我添加一个电视我希望我的ajax调用填充3英寸,面板类型,hdmi输入,而如果我添加一台笔记本电脑,我希望这些输入是CPU,RAM,硬盘,屏幕等。标签 - 它!使用单词列表(在我的例子中,属性)和用于选择单词集的输入字段。 在我的情况下,对于每种类型的属性,我想填充一个单独的输入字段并将其分配/绑定到/ apply tagit插件(抱歉,我不知道如何解释它)。

使用Javascript:

<script src="../js/tag-it.js" type="text/javascript" charset="utf-8"></script>
<script>
        $(function(){
            // Sample1: var sampleTags1 = ["red", "green", "blue"]; 
            // Sample2: var sampleTags2 = ["lcd", "plasma", "tft"]; 

            var sampleTags1 = [<?=createTags('name', 'tags', 1)?>]; 
            // createTags($name, $tags, $id) is a PHP function that returnss a list of tags for a given attribute
            // Question 1: how do I place this here after a new input is added to the DOM?
            $('#myTags').tagit();

            //Question 2: for each input added to the DOM I need also to add this block in the javascript:
            $('#allowSpacesTags1').tagit({itemName: 'item1', fieldName: 'tags1',
                availableTags: sampleTags1, allowSpaces: true
            }); 

            $('#removeConfirmationTags').tagit({
                availableTags: sampleTags,
                removeConfirmation: true
            });
        });

$(document).ready(function() {
    $('#cat_id').change(function(){
        $.post('../includes/ajax.php', {   
          cat_id : $(this).find("option:selected").attr('value')}, function(data) {
          $("#tagholder").html(data);
        });
    });
});

</script>

Ajax为每次调用返回以下内容:

<ul id="allowSpacesTags'.$row['ctid'].'"></ul> // $row['ctid'] is the ID for that attribute

表示输入标签/属性的输入字段。

在出现任何误解之前,我不会问如何在PHP中执行此操作。 我的问题是关于我可以动态添加var(如sampleTags1)的方式,并为ajax添加到DOM的每个新输入调用tagit()。如果我的问题不够明确,我会尝试提供任何必要的信息。 请查看代码注释中的问题。谢谢!

1 个答案:

答案 0 :(得分:1)

http://api.jquery.com/live/

with .live(events,handler(eventObject)) 在动态添加内容时,您无需附加或重新附加事件

EDIT 我刚刚注意到live已被弃用,而你应该使用

。对() http://api.jquery.com/on/