我有一个表单,我希望能够通过双击来编辑该表单的任何部分。所以从这里开始:
<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
</tr>
<tr>
<td>John Smith</td>
<td>johnsmith@gmail.com</td>
<td>+12345678</td>
</tr>
</table>
&#13;
如何通过双击元素,将其转换为输入元素?
例如:如果我双击John Smith
,则HTML会更改为:
<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
</tr>
<tr>
<form action="index.php" method="post">
<td><input type="text" value="John Smith" name="name" /></td>
<td>johnsmith@gmail.com</td>
<td>+12345678</td>
</form>
</tr>
</table>
&#13;
有人知道怎么做吗?
答案 0 :(得分:1)
怎么样:
<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
</tr>
<tr>
<td id="name">John Smith</td>
<td>johnsmith@gmail.com</td>
<td>+12345678</td>
</tr>
</table>
<script>
$("#name").dblclick(function(e) {
if (e.target.parentElement.nodeName != 'form') {
var form = $('<form action="index.php" method="post">');
var parent = $(e.target.parentElement);
parent.children().each(function(i, elem){
form.append(elem);
})
parent.empty();
parent.append(form);
}
})
</script>
它处理双击事件并将<td>
内的所有<tr>
元素包装到<form>
标记中。
答案 1 :(得分:1)
试试这个,第二行的字段可以用dblclick
编辑
document.querySelectorAll("table tr:nth-child(2) td").forEach(function(node){
node.ondblclick=function(){
var val=this.innerHTML;
var input=document.createElement("input");
input.value=val;
input.onblur=function(){
var val=this.value;
this.parentNode.innerHTML=val;
}
this.innerHTML="";
this.appendChild(input);
input.focus();
}
});
&#13;
<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
</tr>
<tr>
<td>John Smith</td>
<td>johnsmith@gmail.com</td>
<td>+12345678</td>
</tr>
</table>
&#13;
答案 2 :(得分:1)
我相信这会做你想要的:
$("document").ready(function () {
var haveForm = false;
$("td").dblclick(function () {
var thisVal = $(this).html();
if (!haveForm) {
$("td").wrapAll('<form action="index.php" method="post" />');
haveForm = true;
}
$(this).html('<input type="text" value="' + thisVal + '" name="name" />');
});
});
这使用jQuery的wrapAll()
和安全防范来创建多个form
元素。