Javascript 如何从td中删除显示值并替换为输入字段?
我有一个显示名称和输入字段的动态表。若名称显示在表行中,则用户可以选择删除该名称。我知道如何从特定的表行中删除值,但用输入字段替换同一点时遇到问题,输入字段应该与其他可用字段相同。以下是我目前掌握的代码:Javascript 如何从td中删除显示值并替换为输入字段?,javascript,jquery,html,Javascript,Jquery,Html,我有一个显示名称和输入字段的动态表。若名称显示在表行中,则用户可以选择删除该名称。我知道如何从特定的表行中删除值,但用输入字段替换同一点时遇到问题,输入字段应该与其他可用字段相同。以下是我目前掌握的代码: <cfoutput> <tr> <td>#TimeFormat(CurrentTime,'hh:mm tt')#</td> <td onClick="deleteSlot('#TimeSlotID#
<cfoutput>
<tr>
<td>#TimeFormat(CurrentTime,'hh:mm tt')#</td>
<td onClick="deleteSlot('#TimeSlotID#')">
<cfif UserID GT 0>
<label>
<div id="#TimeSlotID#">
(<b>#First# #Last#</b>)
<img src="images/delete.png"/>
</div>
</label>
<cfelseif UserID EQ -1>
<label>
<input type="text" name="email" id="email#currentRow#" class="email">
<input type="button" name="slot" id="slot#currentRow#" class="slot" value="Save" onClick="saveTime(this,'#TimeSlotID#')" style="display: none">
</label>
</cfif>
</td>
</tr>
</cfoutput>
//这是我试图从单元格中删除名称并替换为输入字段的代码
function deleteSlot(TimeSlotID){
$('#' + TimeSlotID).replaceWith('<label><input type="text" name="email" id="email#currentRow#" class="email"><input type="button" name="slot" id="slot#currentRow#" class="slot" value="Save" onClick="saveTime(this,'#TimeSlotID#')" style="display: none"></label>');
}
函数删除插槽(TimeSlotID){
$('#'+TimeSlotID).替换为('');
}
我目前在deleteSlot函数中使用的这段代码确实会用输入字段替换名称,但如果我开始在该字段中键入,我就不会像其他字段中那样显示“保存”按钮。我不能100%确定这是否可以按照我开始的方式完成,或者我应该使用其他方法。我尝试了append,但没有成功,每次单击都会给我额外的输入字段。如果有人知道解决此问题的更好方法,请告诉我。我认为需要重新应用事件密钥:
$(document).ready(function() {
applyKeyUp();
});
function applyKeyUp() {
$(".email").keyup(function(e) {
if($(this).val() != '') {
$(".email").not(this).attr('disabled','disabled');
$(this).next(".slot").show();
} else {
$(".email").removeAttr('disabled');
$(this).next(".slot").hide();
}
});
}
function deleteSlot(TimeSlotID){
$('#' + TimeSlotID).replaceWith('<label><input type="text" name="email" id="email#currentRow#" class="email"><input type="button" name="slot" id="slot#currentRow#" class="slot" value="Save" onClick="saveTime(this,'#TimeSlotID#')" style="display: none"></label>');
applyKeyUp();
}
$(文档).ready(函数(){
applyKeyUp();
});
函数applyKeyUp(){
$(“.email”).keyup(函数(e){
if($(this.val()!=“”){
$(“.email”).not(this.attr('disabled','disabled');
$(this.next(“.slot”).show();
}否则{
$(“.email”).removeAttr('disabled');
$(this.next(“.slot”).hide();
}
});
}
函数deleteSlot(TimeSlotID){
$('#'+TimeSlotID).替换为('');
applyKeyUp();
}
问题在于您传递的id奇怪。由于id
前面已经有“#”
,jquery选择器将无法按id应用目标。如果确实需要在id前面添加“#”
,则需要将id应用于等于
选择器
$('#' + TimeSlotID)
应该是
$("[id = '" + TimeSlotID + "']")
示例:所以我有一个关于解决方案的问题,我一直在考虑,因为我有更多的员工应该交给deleteSlot函数,这会使一切变得更加复杂。若我抓取带有两个输入的标签,将其设置在显示名称的div内部,并将样式设置为display:none,会怎么样。用户单击删除图像后,应删除第一个名称,然后属性显示:无。这有意义吗?提前感谢。这将起作用,除非在替换代码时不再绑定.keyup事件的问题。我猜您插入的新代码没有附加keyup事件,因为它发生在您在doc.ready调用中应用它之后。您可以将代码更改为在DOM中始终具有输入字段,但只需使用display:none即可。这就是你的意思吗?是的,我就是这么想的。很好,我试过了。谢谢你的帮助!
$("[id = '" + TimeSlotID + "']")