首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery -无法选择动态创建的元素

jQuery -无法选择动态创建的元素
EN

Stack Overflow用户
提问于 2014-08-13 15:44:18
回答 3查看 86关注 0票数 0

以下是我的HTML结构:

代码语言:javascript
复制
<table id="items" class="table table-striped table-bordered table-hover">
    <thead>
        <tr>
            <td> </td>
            <td>Name</td>
            <td>Description</td>
            <td>Location</td>
        </tr>
        <tr>
            <td>
                <button type="button" class="btn btn-default btn-lg">
                    <span class="glyphicon glyphicon-plus"></span>
                </button>
            </td>
            <td><input type="text" id="addName"></td>
            <td><input type="text" id="addDescription"></td>
            <td></td>
        </tr>
    </thead>
    <tbody>
    </tbody>
    <tfoot>
    </tfoot>
</table>

这是我的jQuery代码:

代码语言:javascript
复制
function getTable(){
    var args = new Object();
    args.op = "getTable";
    $.post("./service.php", args , function(data)
        {
            var dataObj = JSON.parse(data);
            for(var i = 0; i<dataObj.length; i++){
                $('table#items tbody').append("<tr class=\"items_tr\" id=\"item"+dataObj[i].sn+"\"><td>"+dataObj[i].sn+"</td><td>"+dataObj[i].name+"</td><td>"+dataObj[i].description+"</td><td>"+dataObj[i].belonged+"</td></tr>");
        }
    });
}

getTable();

$('tbody').children("tr").hide();
$("tbody tr").hide();
$("tr.items_tr").hide();

最后3条语句根本不起作用。

无法选择已创建的s。

为什么和如何选择他们?

代码语言:javascript
复制
$("tr").hide();

这个人只藏在里面,已经被创造的东西。

更多的问题-- .each()函数如何?

我想在每个td标记上绑定一个单击事件,但是我再次失败了。如何迭代所有新添加的s?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-13 15:46:02

要使最后三个语句工作,元素必须exist。在Ajax响应接收到Ajax之前,您正在执行这些方法。在添加元素(即循环之后)之后,将调用移动到$.get回调中。

某种程度上是相关的(因为它们解释了异步东西是如何工作的):

票数 3
EN

Stack Overflow用户

发布于 2014-08-13 16:00:45

如果试图在事件中隐藏这些元素,请将它们添加到事件处理程序中,例如:

代码语言:javascript
复制
$(document).ready( function () {
        getTable();

        $(element).on('click', function () {
            $('tbody').children("tr").hide();
            $("tbody tr").hide();
            $("tr.items_tr").hide();
        });
     )};

如果在调用getTable函数之后试图隐藏这些元素,那么将这3个函数添加到$.post成功函数中

代码应该如下所示:

代码语言:javascript
复制
function getTable(){
var args = new Object();
args.op = "getTable";
$.post("./service.php", args , function(data)
    {
        var dataObj = JSON.parse(data);
        for(var i = 0; i<dataObj.length; i++){
            $('table#items tbody').append("<tr class=\"items_tr\" id=\"item"+dataObj[i].sn+"\"><td>"+dataObj[i].sn+"</td><td>"+dataObj[i].name+"</td><td>"+dataObj[i].description+"</td><td>"+dataObj[i].belonged+"</td></tr>");
    }
        $('tbody').children("tr").hide();
        $("tbody tr").hide();
        $("tr.items_tr").hide();
});
}

 getTable();
票数 0
EN

Stack Overflow用户

发布于 2014-08-13 16:23:52

嗨,jquery在document.ready上绑定事件,如果有元素是在document.ready之后创建的,那么需要使用jquery的.bind()函数为这些事件注册这些元素。但是,首先要确保注销所有附加的元素。使用unbind();

引用绑定和取消绑定函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25290562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档