点击事件的jQuery .on()函数

时间:2012-08-14 17:31:20

标签: jquery

我有一些由jQuery插入的DIV。 结构是这样的:

<div class="preview_images" id="preview_upload">
     <div class="image_box" id="img_box8793">
         <p>
            <img class="count_19" src="[...]">
            <br>
             <span class="del_img">löschen</span>
         </p>
     </div>
</div>

我想在使用live()之前使用on()函数。 这是我的jQuery函数:

$('#preview_upload div p').on("click", "span", function () {
    alert('###');
    parent_div_id = $(this).parent().parent('div').attr('id');
    $(this).parent().parent('div').fadeOut('slow');
    $('#final_img_prev #' + parent_div_id).remove();
    del_val = $(this).attr('title');
    $('#customfields-tf-150-tf,#customfields-tf-16-tf, #customfields-tf-17-tf, #customfields-tf-18-tf, #customfields-tf-19-tf').each(function () {
        if ($(this).val() == del_val) {
            $(this).val('');
            var img_count = jQuery.cookie('img_count');
            new_img_count = parseInt(img_count) - 1;
            if (new_img_count > 0) {
                jQuery.cookie('img_count', '', {
                    expires: -1
                });
                jQuery.cookie('img_count', new_img_count, {
                    expires: 1
                });
                if (new_img_count < 4) {
                    new_file = '<input type="file" id="file1" name="file1">';
                    $('#uploadForm .file_box').html('');
                    $('#uploadForm .file_box').html(new_file);
                    $('#uploadForm').fadeIn();
                }
            }
            return false;
        }
    });
});

警报()没有被解雇。

错误在哪里?

修改

这是我的答案之后的代码:

jQuery(function($){
   $(document).ready(function() {
      $('#preview_upload div p').on("click", "span", function(){
            alert('###');
      });
   });
)};

我正在使用Jquery 1.7.2。 Firebug没有显示错误。没有警告()被触发。

也许是这样,因为DIV及其内容是动态创建的?

3 个答案:

答案 0 :(得分:3)

当使用on时,事件应该从元素的一个静态父项委派,div #preview_upload是动态生成的,所以你应该选择另一个元素,如bodydocument委托事件的对象,试试这个:

$(document).on("click", "#preview_upload span", function(){
   // ..
})

答案 1 :(得分:1)

将此代码包装在文档ready事件中并且工作正常

$(function(){

   $('#preview_upload div p').on("click", "span", function(){
       alert("working")   
      //your code

   });

});

工作样本:http://jsfiddle.net/HBunv/

如果这不起作用,请检查页面中的其他脚本错误。 Firebug控制台将有助于找出脚本错误

答案 2 :(得分:0)

我认为您要么拥有过时的jQuery版本(低于1.7),要么在将内容加载到DOM之前运行代码,这意味着您需要$(document).ready(function()

您的代码在下面的示例中工作正常,并且警报正在触发!

请检查工作jsFiddle example