0

似乎 JQuery 在使用.find方法作为输入元素或一些复杂的后代(或者我是盲人)方面有一些魔力/细微差别。这是我的 JS 代码:

<div id="edit_lists_div">
  <div style="width: 100%; margin-bottom:5px">&nbsp;
  <button value="" style="display: none;" id="edit_lists_div_btn1">Btn1</button>
  <button value="" style="display: none;" id="edit_lists_div_btn2"
  disabled="disabled">Btn2</button>
  <button value="" style="display: none;" id="edit_lists_div_btn3"
  disabled="disabled">Btn3</button>
  </div>
  <div style="width: 100%; height: 210px; overflow: auto;">
  <table class="my_grid" id="edit_lists_div_table">
      <thead>
      <tr>
          <th width="30"></th>
          <th style="display: none;">id</th>
          <th width="100">Title</th>
          <th width="25">Some field 1</th>
          <th style="display: none;">some_property</th>
          <th>Some field 2</th>
      </tr>
      </thead>
      <caption>Lists</caption>
      <tbody>
      <tr>
          <td property_name="">
          <input row_selector="true" type="checkbox">
          </td>
          <td style="display: none;" property_value="157" property_name="id">157</td>
          <td property_value="List1" property_name="title">List1</td>
          <td property_value="4" property_name="subscribers_count">4</td>
          <td style="display: none;" property_value="9867,9869,9871,9868"
          property_name="subscribers">9867,9869,9871,9868</td>
          <td property_value="New" property_name="status">New</td>
      </tr>
      </tbody>
  </table>
  </div>

我只想得到输入字段

<input row_selector="true" type="checkbox">

并以某种方式管理它。但是.find找不到!这是我所做的:

var tmp = $("#edit_lists_div").find("tbody");
var div_inputs = tmp.find("input"); // it is empty!

这里有什么问题?

更新 1:请注意,此处仍未找到解决方案。我已经选择了正确的答案但未选择它,因为它在我的应用程序上下文中变得不可用。我的意思是这个答案:

var tmp = $("#edit_lists_div").find("tbody");    
var div_inputs = $('input[type="checkbox"]', '#edit_lists_div');

仅适用于 FIRST Firebug 调试。比我有空/not_found JQuery 对象了。

这段代码也是如此:

var tmp = $("#edit_lists_div").find("tbody");    
var div_inputs = $('input', '#edit_lists_div');

这是它第一次起作用。但在第二次尝试后坏了。这里有什么玄学?!

更新2:至于我的处理程序可能出现的问题......不是!我已经为此案例检查了此代码:

$.ajax({
url : getUrl(),
dataType : "json",
success : function(data) {
   // my code goes here and still can't get input element!
  }
});

更新3:如果我需要这些输入有什么关系:

div_inputs.each(function() {
// some business logic with found inputs goes here
});
4

4 回答 4

0

我会在表格中搜索一个复选框,因为表格有一个 ID,应该很容易找到,而且只有一个复选框:

$(function() {
    $('input[type="checkbox"]', '#edit_lists_div_table').prop('checked',true);
});
于 2012-12-11T21:07:05.537 回答
0

我建议您取消.find()并链接您的选择器:

 var $checkbox = $('#edit_lists_div tbody input');
于 2012-12-11T21:12:42.603 回答
0

我不确定你遇到了什么问题。您发布的代码在 jsfiddler.net 上运行良好:

http://jsfiddle.net/BstRW/

// 包括格式化代码是 stackoverflow 对我的 jsfiddle 链接感到满意。

var tmp = $("#edit_lists_div").find("tbody");
var div_inputs = tmp.find("input"); // it is empty!
alert(div_inputs.attr("type"));
于 2012-12-11T21:17:32.943 回答
0

好的,找到了解决方案。它不在 JQuery 中。它在我的应用架构中。我在我的 JS 代码之前有异步 $.ajax调用。成功函数上,它创建了我的表,但正如您所知,我曾尝试在成功方法处理之前访问此表元素,因此在创建它们之前!

希望它会帮助一些人。小心 AJAX!

于 2012-12-12T11:32:52.187 回答