Ajax 更新后未连接事件处理程序,新的 dom 元素 (Internet Explorer)

发布于 2024-11-26 05:06:42 字数 1168 浏览 1 评论 0 原文

问题:新插入的 Dom 元素未正确连接,函数 deletepost 未触发。这种情况仅发生在 IE 上并且对于仅添加到 DOM 的新元素。

$(function(){
        $('#postentry').submit(function() {
          var tyu = $('#tittle_ent').val();
          if(tyu.length <= 2)
            {alert('Enter More Text!'); return false;}else
            {
                $.ajax({
                    type:'post',
                    url: '/posts_in.php',
                    dataType: "json",
                    data: $("#postentry").serialize(),
                    success:function(data){
                        var tittle = data[0];
                        var id= data[1];                        
                        $('<div></div>').attr('id','post'+id).addClass('boxee').html(tittle).prependTo('#boxer');                        
                        $('<img src="img/page-text-delete-icon.png" name="'+id+'">').attr({id:'postchk'+id,onclick: 'deletepost(this.name);'}).appendTo('#post'+id);                        
                        $('#tittle_ent').val('').focus();

                    }
                });
                return false;
            }
        });
    });

Problem: New Inserted Dom elements aren't been wired correctly, function deletepost not firing. This happens only on IE and for new elements only added to DOM.

$(function(){
        $('#postentry').submit(function() {
          var tyu = $('#tittle_ent').val();
          if(tyu.length <= 2)
            {alert('Enter More Text!'); return false;}else
            {
                $.ajax({
                    type:'post',
                    url: '/posts_in.php',
                    dataType: "json",
                    data: $("#postentry").serialize(),
                    success:function(data){
                        var tittle = data[0];
                        var id= data[1];                        
                        $('<div></div>').attr('id','post'+id).addClass('boxee').html(tittle).prependTo('#boxer');                        
                        $('<img src="img/page-text-delete-icon.png" name="'+id+'">').attr({id:'postchk'+id,onclick: 'deletepost(this.name);'}).appendTo('#post'+id);                        
                        $('#tittle_ent').val('').focus();

                    }
                });
                return false;
            }
        });
    });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

养猫人 2024-12-03 05:06:42

现场使用jquery

$(function(){
        $("#boxer img").live("click", function(){
          deletepost($(this).attr("name"));
        });

        $('#postentry').submit(function() {
          var tyu = $('#tittle_ent').val();
          if(tyu.length <= 2)
            {alert('Enter More Text!'); return false;}else
            {
                $.ajax({
                    type:'post',
                    url: '/posts_in.php',
                    dataType: "json",
                    data: $("#postentry").serialize(),
                    success:function(data){
                        var tittle = data[0];
                        var id= data[1];                        
                        $('<div></div>').attr('id','post'+id).addClass('boxee').html(tittle).prependTo('#boxer');                        
                        $('<img src="img/page-text-delete-icon.png" name="'+id+'">').attr({id:'postchk'+id,onclick: 'deletepost(this.name);'}).appendTo('#post'+id);                        
                        $('#tittle_ent').val('').focus();

                    }
                });
                return false;
            }
        });
    });

Use jquery live

$(function(){
        $("#boxer img").live("click", function(){
          deletepost($(this).attr("name"));
        });

        $('#postentry').submit(function() {
          var tyu = $('#tittle_ent').val();
          if(tyu.length <= 2)
            {alert('Enter More Text!'); return false;}else
            {
                $.ajax({
                    type:'post',
                    url: '/posts_in.php',
                    dataType: "json",
                    data: $("#postentry").serialize(),
                    success:function(data){
                        var tittle = data[0];
                        var id= data[1];                        
                        $('<div></div>').attr('id','post'+id).addClass('boxee').html(tittle).prependTo('#boxer');                        
                        $('<img src="img/page-text-delete-icon.png" name="'+id+'">').attr({id:'postchk'+id,onclick: 'deletepost(this.name);'}).appendTo('#post'+id);                        
                        $('#tittle_ent').val('').focus();

                    }
                });
                return false;
            }
        });
    });
静若繁花 2024-12-03 05:06:42

'onclick' 是古老/老派的东西,特别是在使用 jquery 时。试试这个变体:

$('<img src="img/page-text-delete-icon.png" name="'+id+'">')
    .attr('id', 'postchk'+id)
    .click(function () { deletepost(this.name); })   /// use .click() instead.
    .appendTo('#post'+id);                        

'onclick' is ancient/oldschool stuff, especially when using jquery. Try this variant instead:

$('<img src="img/page-text-delete-icon.png" name="'+id+'">')
    .attr('id', 'postchk'+id)
    .click(function () { deletepost(this.name); })   /// use .click() instead.
    .appendTo('#post'+id);                        
流殇 2024-12-03 05:06:42

是的,你必须使用 jQuery live() 函数,更详细的示例可以在这里找到 http://developerfaq.wordpress.com/2011/07/28/fire-event-on-dynamically- generated-dom-element-with-jquery/

Yeah , You must used jQuery live() function, the more detail example can be found here http://developerfaq.wordpress.com/2011/07/28/fire-event-on-dynamically-generated-dom-element-with-jquery/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文