使用 jQuery 动态创建新的 div 并使用它?

发布于 2024-12-23 04:22:06 字数 687 浏览 0 评论 0原文

我尝试过

$(document).ready(function(){
    var conntent = $("#conntent");
    $('#form_post').submit(function(){
        if($("#set").val() != ''){
             $.post('post.php', $("#form_post").serialize(), function(data){
                 conntent.append('<div class="item"><span>' + data + 
                 '</span></div>');
             });
        }
        $("#set").val('');
        return false;
     });    

   //Then I try to click on new the new element

        $('span').click(function(){
            alert("OK");
        });
   });

但是,在此之后我无法使用单击 spans

我认为在附加它们之后它们是否可能不是 DOM 的一部分。有什么建议吗?

I tried this

$(document).ready(function(){
    var conntent = $("#conntent");
    $('#form_post').submit(function(){
        if($("#set").val() != ''){
             $.post('post.php', $("#form_post").serialize(), function(data){
                 conntent.append('<div class="item"><span>' + data + 
                 '</span></div>');
             });
        }
        $("#set").val('');
        return false;
     });    

   //Then I try to click on new the new element

        $('span').click(function(){
            alert("OK");
        });
   });

However, after this I can't use click on the spans

I think is it possible after appending them that the are not part of the DOM. Any suggestions?

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

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

发布评论

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

评论(2

懷念過去 2024-12-30 04:22:06

这段代码是否:

$('span').click(function(){
    alert("OK");
});

在这段代码之前运行:

conntent.append('<div class="item"><span>' +data + '</span></div>');

这很有可能,因为 POST 是异步的。

您可以使用 jQuery 的 .live().delegate()< /code>绑定到尚未添加到 DOM 的元素。这样,当动态添加它们时,单击事件将自动绑定到它们。

或者,如果您只想在 POST 之后调用 .click(function()) ,那么您可以在响应中调用它,而不是在整个事件之外调用它。像这样的事情:

$.post('post.php', $("#form_post").serialize(), function(data){
    conntent.append('<div class="item"><span>' +data + '</span></div>');
    $('span').click(function(){
        alert("OK");
    });
});

就我个人而言,我会选择 .delegate() 方法,但整体结构取决于您。我不知道,在该页面的生命周期中可能存在您不想绑定的情况。

Is this code:

$('span').click(function(){
    alert("OK");
});

running before this code:

conntent.append('<div class="item"><span>' +data + '</span></div>');

This is very much a possibility since the POST is asynchronous.

You can use jQuery's .live() or .delegate() to bind to elements which haven't been added to the DOM yet. That way when they are dynamically added the click event will automatically bind to them.

Alternatively, if you just want that call to .click(function()) to happen after the POST then you can call it in the response rather than outside of the whole thing. Something like this:

$.post('post.php', $("#form_post").serialize(), function(data){
    conntent.append('<div class="item"><span>' +data + '</span></div>');
    $('span').click(function(){
        alert("OK");
    });
});

Personally I'd opt for the .delegate() approach, but the overall structure is up to you. There may be cases in the life of that page which you don't want to bind, I don't know.

作业与我同在 2024-12-30 04:22:06

可能有 2 个可能的原因导致它不起作用
第一个你试图在“span”成为 DOM 的一部分之前绑定事件
解决方案是在此之后绑定事件:

conntent.append('<div class="item"><span>' +data + '</span></div>');
$('span:last').bind('click', handler);

第二,也许您应该使用像这样的上下文

$('span', conntent).bind('click',handler)

欢呼:)

There is maybe 2 possible reason cause it doesn't work
1st You're trying to bind event before 'span' is part of DOM
Solution is bind event after this:

conntent.append('<div class="item"><span>' +data + '</span></div>');
$('span:last').bind('click', handler);

2nd maybe you should use context like this

$('span', conntent).bind('click',handler)

cheers :)

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