删除之前附加的内容后,append()不起作用

时间:2011-12-05 08:53:35

标签: javascript jquery append

我将用户输入的网址转换为bbcode并将其附加到textarea,但是在删除其中一行后,它不会附加更多(但你可以看到firebug中新添加的值,真的很奇怪)。这是我的代码:

$(function(){
    $(".addUrl").click(function(){
        $("#addUrl").slideDown();
    })
    $('#su').click(function(){
        if($("#u").val().length>3)
        addUrl($("#u").val());
        $("#u").val("");
    })
    $("input[value=\"x\"]").click(function(){$("#addUrl").fadeOut();})
})
function addUrl(e)
{
    patt="http[s]*:\/\/";
    if(e.match(patt))
        u=e;
    else
        u="http://"+e;
    $("textarea[name=\"content\"]").append("\n\r[url]"+u+"[/url]\n\r");
}

这是jsfiddle:http://jsfiddle.net/FpSsc/

2 个答案:

答案 0 :(得分:6)

这是因为您正在更改textarea中的html,这是默认值。看来,只要您设置了一个新值(通过在文本框中键入或删除某些内容),就会忽略此默认值。

要解决此问题,您需要设置textarea的值而不是附加到内容:

function addUrl(e)
{
    patt="http[s]*:\/\/";
    if(e.match(patt))
        u=e;
    else
        u="http://"+e;

    var newVal = $("textarea[name=\"content\"]").val() + "\n\r[url]"+u+"[/url]\n\r"
    $("textarea[name=\"content\"]").val(newVal);
}

http://jsfiddle.net/infernalbadger/FpSsc/1/

或者像菲利克斯推荐的那样:

function addUrl(e)
{
    patt="http[s]*:\/\/";
    if(e.match(patt))
        u=e;
    else
        u="http://"+e;

    $("textarea[name=\"content\"]").val(function(i, v) { return v + "\n\r[url]"+u+"[/url]\n\r"; });
}

答案 1 :(得分:0)

我可能会建议你在这里使用val

function addUrl(e)
    {
        patt="http[s]*:\/\/";
        if(e.match(patt))
            u=e;
        else
            u="http://"+e;
        $("textarea[name=\"content\"]").val( $("textarea[name=\"content\"]").val() + "\n\r[url]"+u+"[/url]\n\r");
    }

请尝试这个addUrl函数。