2

我有以下 HTML 元素;

<div id="divOrderContainer">
 <ul id="ulOrders">
<li id="liAck">
  <div id="divViewOrderTitle"></div>
  <div id="divViewOrderSpacer"></div>
  <div id="divAcknowledgeItems"></div>              
</li>
<li id="liTemp">
  <div id="divViewOrderTitle">test</div>
  <div id="divViewOrderSpacer"></div>
  <div id="divTempItems"></div>
</li>
 </ul>          
</div>

在页面准备就绪时,我执行 ajax 请求,然后在响应时将其插入到现有的 DOM 树中,例如;

htmlBuilder_Temp = htmlBuilder_Temp + '<li><table id="tableTemp">' +
 '<tr>' +
'<th>Ia</th>' +
'<th>Den</th>' +
'<th>Unt</th>' +
'<th>Ory</th>' +
'<th></th>' +
 '</tr>';               
htmlBuilder_Temp = htmlBuilder_Temp + 
 '<tr>' +
'<td> a </td>' +
'<td ""> +b+ </td>' +
'<td> +c+ </td>' +
'<td> +d+ </td>' +
'<td><span id="span'+posid+'">delete<span></td>' +
 '</tr>';           
htmlBuilder_Ack = htmlBuilder_Ack + '</table></li>';

新元素的附加“总是”成功,

所以这是我的问题,我想将点击处理程序附加到下的每个跨度

Table>tr>td>span, 

当点击时会提醒我元素 id 但是,当我尝试检查是否附加了点击处理程序时,没有,

单击处理程序代码:

$("#divTempItem > table > tbody > tr").('click', 'td span', function(){
   alert($(this).attr("id");
});

我也试过;

$("#tableTemp").on('click', 'tr td span', function(){
   alert($(this).attr("id");
});

但无济于事,似乎我无法访问我正在寻找的特定 DOM 元素......访问名称“span”+number 并不能解决我的问题,

我是不是错过了什么,

这是输出 DOM 树的视图;我已经删除了最后的结束标签,我认为这就足够了......

<div id="divOrderContainer">
   <ul id="ulOrders">
      <li id="liAck"></li>
      <li id="liTemp">
          <div id="divViewOrderTitle">test</div>
          <div id="divViewOrderSpacer"></div>
          <div id="divTempItems">
            <li>
               <table id="tableTemp">
                  <tbody>
                     <tr>                         
                       <td> a </td>
                       <td> b </td>
                       <td> c </td>
                       <td> d </td>
                       <td><span id="span8">delete</span></td>
                     </tr>                         
                   </tbody>
                </table>

到底是谁自动创建了“TBODY”元素?

谢谢..

4

2 回答 2

2

从您对问题的描述看来,从 Ajax 部分来看,在绑定事件的点上,该表不存在于 DOM 中,而是我建议绑定到liDOM 中存在的元素DOMReady

$('#divTempItems li').on('click', 'td', function(e){
    alert(this.id);
});

请注意,您的 HTML 无效(如粘贴在后面的代码块中),因为 ali必须出现在并且只能出现在 a ulorol元素中,并且div元素不能是 aul或的直接子元素ol。重复ids 也是无效的,在文档中id 必须是唯一的。

tbody呈现表格元素时,大多数(如果不是全部)浏览器会自动创建。虽然我记得规范说它们是可选的,但浏览器似乎不同意。

于 2012-08-02T07:08:28.050 回答
0

可能你可以改变这一行:

'<td><span id="span'+posid+'">delete<span></td>' +

'<td><span id="span'+posid+'" onclick='+'"delete(this)">delete<span></td>' +

函数是

function delete(obj){
   alert($(obj).arrt('id'));
}
于 2012-08-08T10:49:03.147 回答