0

一开始我使用警报,但觉得它不是那么好..它给用户增加了额外的步骤并且很烦人..

如果字段为空,我想这样做,然后恢复以前的值。

<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 行)

http://jsfiddle.net/VE7Tq/1/

4

2 回答 2

1

据我了解,您正在尝试检查文本框。如果它是空的,用它之前的值替换。

一个简单的逻辑:

txt1)将变量的范围更改为Global

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();

更新了 JSFiddle

我想你可以理解这些小提琴之间的区别。

于 2013-08-06T11:10:08.523 回答
0

尝试这个

语法错误

if (v.trim() == "") {//wrong

用。。。来代替

if ($.trim(v) == "") {//right syntax
于 2013-08-06T10:25:09.467 回答