一开始我使用警报但觉得它不是那么好..它给用户增加了额外的步骤而且很烦人..
如果field为空,我想这样做,然后恢复之前的值。
<ul id="task-group">
<li class="active"><a href="#">Personal</a></li>
<li class="active"><a href="#">Work</a></li>
</ul>
<input type="text" name="task-group" style="display:none">
jquery的:
$(document).ready(function () {
var addInput = $('input[name="task-group"]').hide();
var beforeItems = $('li.active');
beforeItems.on('dblclick', itemClick);
function inputKeydown(e) {
var $this = $(e.target).closest('input[type="text"]');
if (e.keyCode == 13) {
$this.blur();
}
}
function itemClick(e) {
var $this = $(e.target).closest('li.active');
var txt = $this.find('a').text();
var input = $("<input type='text'/>").val(txt);
$this.html('');
input.appendTo($this).focus();
input.on('blur', editInputBlur);
input.keydown(inputKeydown);
}
function editInputBlur(e) {
var $this = $(e.target).closest('input[type="text"]');
var v = $this.val();
if (v.trim() == "") {
} else {
var $a = $("<a href='#'>" + v + "</a>");
$this.parent().append($a);
$this.remove();
}
}
});
但我总是用val()方法得到空的html字段,帮助..(第34行)
答案 0 :(得分:1)
根据我的理解,您正在尝试检查文本框。如果为空,请替换为其前一个值。
一个简单的逻辑:
1)将txt
变量的范围更改为全局。
txt = $this.find('a').text(); // remove var keyword
2)然后你可以在任何地方访问它。在文本框blur
事件中,检查是否为空值(您已经这样做)
发表这样的声明
if (v.trim() == "") {
$this.val(txt); // Replace with the previous value
} else {
var $a = $("<a href='#'>" + v + "</a>");
$this.parent().append($a);
$this.remove();
}
选中此JSFiddle
希望你理解这个逻辑。
更新:优化答案很少,最好还是选择
var v = $this.val();
if (v.trim() == "") {
v= txt;
}
var $a = $("<a href='#'>" + v + "</a>");
$this.parent().append($a);
$this.remove();
我认为你可以理解这些小提琴之间的区别。
答案 1 :(得分:0)
试试这个
语法错误
if (v.trim() == "") {//wrong
替换为
if ($.trim(v) == "") {//right syntax