如果用户按下回车键或在外部单击,则保留元素的新html值
Keep new html val of an element if the user presses enter or clicks outside
我正试图用下面的代码段找到一种方法,当用户单击<input>
之外的其他位置时,将.text(newContent)
值放入编辑过的单元格中。
目前,它只在用户按下键盘上的Enter键时工作。我尝试过在keypress函数中添加e.type == "click"
或e.which == 1
,但它无法工作,因为它是<td>
单元格上的一个事件。
有没有一种方法可以删除<input>
标记,并在用户单击td之外时保留用户的值?
$(function () {
$(".td").click(function () {
var content = $(this).text();
if ( $(this).text() == '...' ) {
$(this).html('<input type="text" value="" size="8" />');
} else {
$(this).html('<input type="text" value="' + content + '" size="8" />');
}
$(this).children().first().focus();
$(this).children().first().keypress(function (e) {
if ( e.which == 13 ) {
if ( $(this).val() == '' ) {
var newContent = '...'
$(this).parent().text(newContent);
} else {
var newContent = $(this).val();
$(this).parent().text(newContent);
}
}
});
});
});
#table td {
width: 50px;
border:1px solid #c0c0c0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="table">
<tr>
<td class="td" data-res="1">...</td>
<td class="td" data-res="2">...</td>
<td class="td" data-res="3">...</td>
<td class="td" data-res="4">...</td>
<td class="td" data-res="5">...</td>
<td class="td" data-res="6">...</td>
<td class="td" data-res="7">...</td>
</tr>
</table>
原来有一些问题(嵌套处理程序从来都不是一个好主意,因为会发生多个事件)。我使用委托的处理人员在下面为您做了一次完整的重写。
JSFiddle:http://jsfiddle.net/TrueBlueAussie/ckk4ab3x/
这使用委托的事件处理程序来允许动态创建控件。它还针对focusout
事件,这是您离开输入时得到的。
$(function () {
// Use a delegated event handler as the inputs are dynamic
$('#table').on('focusout', 'td input', function () {
var $input = $(this);
var $td = $input.closest('td');
var content = $input.val();
$td.html(content == "" ? "..." : content);
}).on('click', 'td', function () {
var $td = $(this)
var content = $td.text();
if (content == '...') {
content = "";
}
$td.html('<input type="text" value="' + content + '" size="8" />');
// Focus on the new input
$('input:first', $td).focus();
});
});
相关文章:
- Jquery html() 和保留元素名称
- 单击其他元素或鼠标向上时隐藏输入框,但保留一次焦点
- 如何在页面刷新后保留动态创建的html元素及其数据/值
- 在正文中保留附加的相对元素
- 将所有元素保留在同一位置
- 如何添加动态表单元素但保留其值(JS)
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
- 单击按钮后如何保留元素
- 使用链接截断html中的文本以显示更多/更少并将元素保留在里面
- AngularJS 1.2.0 $http不保留数组元素
- 在开发元素被确认后,在开发元素下方保留一个单击按钮
- 在谷歌修饰的前元素中保留 html 字符
- 在 DOM 中添加新元素后,保留元素屏幕位置
- 当我制作可拖动克隆时,如何保留元素的高度和宽度
- 缩放时保留元素大小和位置
- 如果用户按下回车键或在外部单击,则保留元素的新html值
- JavaScript[].Sort()方法在应该保留元素时进行排序
- JS模板引擎,保留元素
- 在DOM中移动控制器时保留元素/作用域状态
- 使用jQuery或JS在变量中保留元素的每个CSS简写属性