0

我有一些元素和一些数据。我需要为它创建不断变化的字段。所以我使用 textarea 来更改这个元素中的文本。一切正常,但是当我想用文本 langht 添加条件时,有些东西不能正常工作......这是我的代码和一些小提琴(http://jsfiddle.net/qzzKA/)。谢谢帮助...

<div class="textchange_box">
    <span class="desc">data<br>data
    </span>
    <textarea name="desc" class="textfield"></textarea>
    <span class="change">change</span>
    <span class="save">save</span>
</div>​ 

和jQuery:

$(".change").live('click', function () {
    $(this).prev('.textfield').css('display','block');
    $(this).prevAll('.desc').css('display','none');
    $(this).next('.save').css('display','block');
    $(this).css('display','none');
});
$(".save").live('click', function () {
    var default_value = $(this).prev('.desc').text().replace(/\r\n|\r|\n/g,"<br/>");
    var actual_value = $(this).prev('.textfield').text().replace(/\r\n|\r|\n/g,"<br />");
    $(this).prevAll('.textfield').css('display','none');
    $(this).prev('.change').css('display','block');
    $(this).css('display','none');
    if (actual_value.length < 0) {
        $(this).prev('.desc').replaceWith('<span class="desc">' + default_value +'</span>');
    }
    else if (actual_value.length > 0) {
        $(this).prev('.desc').replaceWith('<span class="desc">' + actual_value +'</span>');
    }
});
4

1 回答 1

3

替换您的以下行:

if (actual_value.length < 0) {

对于这个:

if (actual_value.length <= 0) {

因为当字符串为空时,它的长度为零而不是负数。

更新:
您还有其他错误,以下两行:

var default_value = $(this).prev('.desc').text().replace(/\r\n|\r|\n/g,"<br/>");
var actual_value = $(this).prev('.textfield').text().replace(/\r\n|\r|\n/g,"<br />");

应该是这样的:

var default_value = $(this).prevAll('.desc').text().replace(/\r\n|\r|\n/g,"<br/>");
var actual_value = $(this).prevAll('.textfield').val().replace(/\r\n|\r|\n/g,"<br />");

因此,使用prevAll()代替prev()和使用val()for textarea 而不是text().

您还需要在prevAll()这里使用:

$(this).prev('.desc').replaceWith('<span class="desc">' + actual_value +'</span>');

所以它会是:

$(this).prevAll('.desc').replaceWith('<span class="desc">' + actual_value +'</span>');

工作小提琴

基本上最常见的错误是你认为.prev()会遍历所有以前的兄弟姐妹,而为此你必须使用prevAll()

于 2012-11-22T11:33:31.470 回答