日期:2014-05-16  浏览次数:20369 次

关于jquery html()的问题
HTML code

<html>
<head>
<script src="jquery.js"></script>
</head>
<body>
<table id="mytable" border="1">
<tbody>
    <tr><td id="1">1</td><td id="7">7</td></tr>
    <tr><td id="2"><input type="text" value="xxx" /></td><td id="8">8</td></tr>
    <tr><td id="3"><input type="button" value="yyy" /></td></tr>
    <tr><td id="4">4</td></tr>
    <tr><td id="5">5</td></tr>
    <tr><td id="6">6</td></tr>
</tbody>
</table>
<script>
    var td_query=$("tbody>tr>td:not(:has(input))");
    //alert(td_query.length); // 输出6
    $("tbody>tr>td:not(:has(input))").dblclick(function(){
        $(this).html("<input type='text' value='test' />");
        alert(td_query.length);
    });
</script>
</body>
</html>



我这样写就不行了。 双击td 在td中新增一个 input的框 在双击生成的这个input框 还是会弹出信息

我的目的是: 双击td 后当前td 中新增一个input框。 当时如果当前td已经包含了input框。双击该input 要求不会执行该双击事件
这是为什么?

------解决方案--------------------
$("tbody>tr>td:not(:has(input))").dblclick 楼主这一句已经对符合条件的元素绑定了handler,即使后面改变了元素中的内容,该handler还是绑定在该元素上并没有改变。
其实可以使用jquery的one函数为元素绑定一次性的handler,这样就没有问题,也可以在你上面写的handler中html后面闪出dbclick的处理函数,但是比较推荐第一种方法。
JScript code

 $("tbody>tr>td:not(:has(input))").one('dbclick',function(){
        $(this).html("<input type='text' value='test' />");
        alert(td_query.length);
    });