jQuery没有';找不到动态添加的DOM对象?

jQuery没有';找不到动态添加的DOM对象?,jquery,json,getjson,Jquery,Json,Getjson,我是jQuery的新手。。。我已经多次使用Javascript,对DOM操作非常熟悉,但对jQuery的API或gears并不熟悉 我通过JSON调用动态添加DOM元素,如下所示: $(document).ready(function() { var url = "jsonMenuItems.js"; $.getJSON(url, null, function(data) { var html = ""; //ale

我是jQuery的新手。。。我已经多次使用Javascript,对DOM操作非常熟悉,但对jQuery的API或gears并不熟悉

我通过JSON调用动态添加DOM元素,如下所示:

$(document).ready(function() {
        var url = "jsonMenuItems.js";
        $.getJSON(url, null, function(data) {
            var html = "";
            //alert(data.items);
            data = data.items;
            for (var key in data) {      
                html += "<td class=\"menuItem\"><span>" + data[key].name + "</span></td>";
            };
            $("#menuTR").html(html);
        });

        var lZeroArray = $("#menu td");
        lZeroArray.click(function() {
            $("#submenu").slideDown("fast");
        });
    });
$(文档).ready(函数(){
var url=“jsonMenuItems.js”;
$.getJSON(url,null,函数(数据){
var html=“”;
//警报(数据项);
数据=数据项;
对于(数据中的var键){
html+=“”+数据[键]。名称+“”;
};
$(“#menuTR”).html(html);
});
var lZeroArray=$(“#菜单td”);
lZeroArray.单击(函数(){
$(“#子菜单”)。向下滑动(“快速”);
});
});
如果TD项目手动显示在页面上,则单击功能slideDown可以完美工作。。。如果我使用上述代码动态添加TD项,则不会触发单击函数slideDown

jQuery找不到自己添加的项,或者我做错了什么?

看看jQuery。这将允许您将事件绑定到动态添加的项

$("#menu td").live("click", function(){
    $("#submenu").slideDown("fast");
});
看看jQuery。这将允许您将事件绑定到动态添加的项

$("#menu td").live("click", function(){
    $("#submenu").slideDown("fast");
});

看起来您将单击事件添加到了错误的元素中。您正在将动态添加的TDs添加到id=“menuTR”的元素中,但在id=“menu”的后代TD元素上设置单击事件


要进行测试,请尝试将$(“menu td”)更改为$(“menuTR td”),反之亦然。或者,您可以尝试使用$(“td.menuItem”)选择元素,这将选择具有menuItem类的所有td元素。

看起来您将单击事件添加到了错误的元素中。您正在将动态添加的TDs添加到id=“menuTR”的元素中,但在id=“menu”的后代TD元素上设置单击事件


要进行测试,请尝试将$(“menu td”)更改为$(“menuTR td”),反之亦然。或者,您可以尝试使用$(“td.menuItem”)选择元素,这将选择具有menuItem类的所有td元素。

问题是:您的事件处理程序绑定到
$(“#menu td”)
,但在完成此操作时,
菜单中没有
td
s

使用
live()

或者,在较旧的jquery版本中使用的解决方案是:

var url = "jsonMenuItems.js";
$.getJSON(url, null, function(data) {
  var html = "";
  //alert(data.items);
  data = data.items;
  for (var key in data) {
    html += "<td class=\"menuItem\"><span>" + data[key].name + "</span></td>";
  };
  $("#menuTR").html(html);
  $("#menu td").click(function() {
    $("#submenu").slideDown("fast");
  });
});
var lZeroArray = $("#menu td");
lZeroArray.click(function() {
  $("#submenu").slideDown("fast");
});
var url=“jsonMenuItems.js”;
$.getJSON(url,null,函数(数据){
var html=“”;
//警报(数据项);
数据=数据项;
for(var输入数据){
html+=“”+数据[键]。名称+“”;
};
$(“#menuTR”).html(html);
$(“#菜单td”)。单击(函数(){
$(“#子菜单”)。向下滑动(“快速”);
});
});
var lZeroArray=$(“#菜单td”);
lZeroArray.单击(函数(){
$(“#子菜单”)。向下滑动(“快速”);
});

问题是:您的事件处理程序被绑定到
$(“#menu td”)
,但在完成此操作时,
菜单中没有
td

使用
live()

或者,在较旧的jquery版本中使用的解决方案是:

var url = "jsonMenuItems.js";
$.getJSON(url, null, function(data) {
  var html = "";
  //alert(data.items);
  data = data.items;
  for (var key in data) {
    html += "<td class=\"menuItem\"><span>" + data[key].name + "</span></td>";
  };
  $("#menuTR").html(html);
  $("#menu td").click(function() {
    $("#submenu").slideDown("fast");
  });
});
var lZeroArray = $("#menu td");
lZeroArray.click(function() {
  $("#submenu").slideDown("fast");
});
var url=“jsonMenuItems.js”;
$.getJSON(url,null,函数(数据){
var html=“”;
//警报(数据项);
数据=数据项;
for(var输入数据){
html+=“”+数据[键]。名称+“”;
};
$(“#menuTR”).html(html);
$(“#菜单td”)。单击(函数(){
$(“#子菜单”)。向下滑动(“快速”);
});
});
var lZeroArray=$(“#菜单td”);
lZeroArray.单击(函数(){
$(“#子菜单”)。向下滑动(“快速”);
});

这是因为在创建它们之后,您必须对它们重新应用单击功能:

$.getJSON(url, null, function(data) {
        var html = "";
        //alert(data.items);
        data = data.items;
        for (var key in data) {      
            html += "<td class=\"menuItem\"><span>" + data[key].name + "</span></td>";
        };
        $("#menuTR").html(html);

        $("#menu td").click(function() {
            $("#submenu").slideDown("fast");
        });

    });
$.getJSON(url、null、函数(数据){
var html=“”;
//警报(数据项);
数据=数据项;
对于(数据中的var键){
html+=“”+数据[键]。名称+“”;
};
$(“#menuTR”).html(html);
$(“#菜单td”)。单击(函数(){
$(“#子菜单”)。向下滑动(“快速”);
});
});

这是因为在创建它们之后,您必须对它们重新应用单击功能:

$.getJSON(url, null, function(data) {
        var html = "";
        //alert(data.items);
        data = data.items;
        for (var key in data) {      
            html += "<td class=\"menuItem\"><span>" + data[key].name + "</span></td>";
        };
        $("#menuTR").html(html);

        $("#menu td").click(function() {
            $("#submenu").slideDown("fast");
        });

    });
$.getJSON(url、null、函数(数据){
var html=“”;
//警报(数据项);
数据=数据项;
对于(数据中的var键){
html+=“”+数据[键]。名称+“”;
};
$(“#menuTR”).html(html);
$(“#菜单td”)。单击(函数(){
$(“#子菜单”)。向下滑动(“快速”);
});
});

-1不,webwires声明选择器工作正常——单击功能slideDown工作正常。啊,但是当他测试单击功能时,他手动将TDs放在页面上,这样他就不会更改现有的封闭元素(大概id为“menu”)。我推翻了我的投票。他使用了#menuTR append(),但是事件处理程序绑定到了#menu td.-1不,webwires已经声明选择器工作正常——单击函数slideDown工作得很好。啊,但是当他测试单击函数时,他手动将TDs放在页面上,这样他就不会更改现有的封闭元素(id为“menu”)我推翻了我的投票。他使用了#menuTR append(),但随后事件处理程序绑定到#menu td.+1 live(),在1.3版之后可用。或者有一个插件,如果使用1.2像我一样。非常感谢你。。。这起作用了。还有另一个实时答案,但您的答案日期是最早的,因此您可以获得答案支票。+1 live()在1.3版之后提供。或者有一个插件,如果使用1.2像我一样。非常感谢你。。。这起作用了。有另一个现场答案,但你的答案是日期第一,所以你得到了答案。Grrr…'一个新的答案出现了(和你的答案一样)'Grrr…'一个新的答案出现了(和你的答案一样)