加载DOM后ajax post的Jquery事件


Jquery events for ajax post after DOM is loaded

我在获取后DOM创建的元素以继承jquery事件时遇到问题。据我所知,on()应该处理好这一点,但我无法让它为在我的表单sumbit'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按要求(代码点火器):

<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>

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

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

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

查看on()docs 中的可选选择器

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

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

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

就像上面的海报所说的,您正在使用on选择器来处理绑定处理程序。但您应该将其用于委派或直播。

您可能想尝试绑定:

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