我在获取后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/