2011-03-14 57 views
2

我有一个简单的表单添加关键字,这些关键字有删除按钮,这两个POST请求都是通过ajax完成的。删除请求到非动态关键字通过ajax工作,但动态添加回退到HTTP请求。我四处阅读,并将问题缩小到事件绑定。遇到动态添加东西的事件绑定问题

var app = { 
setupKeywordDeleteForm: function() { 
    // Was using regex plugin to find form which had ids like list_1, list_2 etc 
    // $("form:regex(id, list_*)").each (function() { 
    $('li').each (function() { 
    var $form = $(this); 
    $form.submit(function(e) { 
     e.preventDefault(); 
     $.post($form.attr('action'), $form.serialize(), function() { 
     }, "script"); 
    }); 
    }) 
}, 

setupKeywordAddForm: function() { 
    var $form = $('#add_keywords'); 
    $form.bind('submit', (function(e) { 
    e.preventDefault(); 
    $.post($form.attr('action'), $form.serialize(), function() { 
    }, "script"); 
    })); 
}, 
} 

    jQuery(function() { 
    app.setupKeywordAddForm(); 
    app.setupKeywordDeleteForm(); 
    }); 

我一直在读learningjquery并用的liveQuery插件搞乱,但无济于事。我明白这个问题,只是无法解决问题。任何帮助表示赞赏。另外如果你知道一个更好的方式来定义setupKeywordDeleteForm();没有循环,请让我知道。

编辑:

问题是,当我通过AJAX添加新的关键字,对他们的删除按钮回落到HTTP请求,而不是通过AJAX提交。

+0

你的问题到底是什么? – 2011-03-14 01:53:10

+0

对不起,如果我不清楚,我澄清了一点。 – 2011-03-14 01:59:06

回答

1

管理解决它由于thisthis。基本上它调用div.edit_list上的setupNew:last,即新添加的关键字,并在其上设置.post()。

var app = { 
setupNew: function() { 
    var $form = $('.edit_list:last'); 
    $($form).submit(function(e) { 
     e.preventDefault(); 
     $.post($form.attr('action'), $form.serialize(), function() { 
     }, "script"); 
    }); 
}, 

setupKeywordAddForm: function() { 
    var $form = $('#add_keywords'); 
    $form.submit(function(e) { 
    e.preventDefault(); 
    $.post($form.attr('action'), $form.serialize(), function() { 
     app.setupNew(); 
    }, "script"); 
    }); 
} 
} 

是的,它有点丑,我也许应该大干,向上(我猜我应该创建一个接受输入的一般addKeyword功能,并呼吁现有的关键字,功能和新的关键字时增加? ),但它现在起作用。谢谢大家的帮助。

0

我不是很确定问题是什么,但我认为$(selector).live()http://api.jquery.com/live/)是你想要的。它将使用选择器将事件监听器绑定到所有当前和将来的元素。

+0

嗯,我认为live()不适用于submit()。 – 2011-03-14 01:59:32

+0

我认为它... – errorhandler 2011-03-14 02:02:31

+0

嗯,我应该做$('li')。live('each',function(){})...我做了,似乎没有工作。 – 2011-03-14 02:08:49