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

dot*_*hlu 8 javascript jquery append

我将用户输入的URL转换为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");
}
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ton 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);
}
Run Code Online (Sandbox Code Playgroud)

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"; });
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以将函数传递给`.val()`:`ele.val(function(i,v){return v +'new content';});`而不是两次调用`.val()`. (2认同)