加载DOM后,ajax发布的Jquery事件

时间:2012-03-05 02:26:49

标签: php jquery ajax dom

我在发布DOM创建的元素时无法继承jquery事件。 据我所知,on()应该注意这一点 - 但我不能让它适用于在我的形式 - 总结中创建的元素' post'呼叫。 我也试过:$(" form")。on(" sumbit",function(){

$(document).ready(function(){

    $('p.dev_summary').on("click",function() {
        $(this).next().toggle();
        }); 

    $("form").submit(function() {
    var dev_text = $('textarea').attr('value');
        $.ajax({
            type: "POST",
            url: "composite/submit_dev",
            data: "dev_text=test",
            success: function(){
                var $content = $('<div class=insert_dev id></div><p class=dev_summary>Some Text</p>');
                $content.insertBefore( $('div.insert_dev');
            }
        });
    return false;
    });
});

提前谢谢。

HTML / PHP(codeigniter):

<div class="composite_wrapper">
<?php foreach($development as $row): ?>
<div class="insert_dev" id="<?php echo $row['orderid'];?>"></div>
<p class="dev_summary"><?php echo 'Summary: ' .$row['text'];?></p>
<div class="development"><?php echo $row['text']?></div>
<?php endforeach ?>

<?php 
$attributes = array('style' => 'display: none');

?>
<?php echo form_open('#',$attributes); ?>
<?php echo validation_errors(); ?>
<p>
<label for="dev_text">Development:</label>
<br />
<?php echo form_textarea('dev_text'); ?>
</p>

3 个答案:

答案 0 :(得分:2)

on()有2个实现。一个允许直接绑定元素,但这些元素必须存在,并且不考虑未来。

另一种方法是委派方法。您将处理程序委派给更高级别的元素或文档。此方法在事件冒泡时捕获事件

 $(document).on('click', 'p.dev_summary', function ......

查看on()docs

中的可选选择器

http://api.jquery.com/on/

答案 1 :(得分:0)

关于jQuery如何处理这些事件处理程序,有一个非常好的详细阅读:

http://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html

就像上面的海报所说,你正在使用on选择器来处理绑定处理程序。但你应该将它用于委托或现场。

答案 2 :(得分:0)

您可能想尝试bind:

http://api.jquery.com/bind/