jQuery中的append()函数

时间:2013-05-02 11:43:08

标签: jquery

我想让用户双击我网页上的li元素,然后将li文本添加到下面的文本区域。

用户可以双击多个li项目。每次发生这种情况时,新项目都会附加到textarea列表的后面。

我在textarea中有一些默认文本:"双击手风琴插入电影名称。"

因此,以下HTML代码:

<!-- there is a list before this which I have not included -->

<div id="chosen">

<form action="process.php?stage=4" method="post">

<textarea name="g" row="5">Double click on movie name in list above to insert.</textarea>

<input type="submit" />


</form>

</div>

和jquery:

$(document).ready (function(){
$('li').bind('dblclick', function(){ //#accordion 

    var text = $(this).html() + "; ";
    $("textarea").append(text);

    });

});  

代码绝对可以在正常的范围内工作,但是当我在textarea中单击以修改其内容时停止工作。为什么会这样?有没有办法让代码工作,即使我触及textarea的内容?

(2) 另外请注意,为什么以下代码不起作用?我在发现append()方法之前试过这个。它与$(this)范围有关吗?

$(document).ready (function(){
$('li').bind('dblclick', function(){ //#accordion 

    var text = $(this).html() + "; ";
    $("textarea").html( function() { //.chosen 

       var currenthtml = $(this).html(); // retrieve the current HTML first 
       currenthtml += text;
        return currenthtml;      });

    });

});  

(3)另外,如果用户已经双击li元素以将其包含在textarea中,如何撤消包含,我该如何编写功能?有没有一种方法可以让我做与append()相反的方法?

3 个答案:

答案 0 :(得分:2)

只是你问题的答案2)

html()函数用于获取或将文本插入HTML标记(例如:<div></div>); textarea的内容不是html。相当于:

  $("textarea").val("Hello World!");

对于你的第一个问题,我做了一个小提琴:http://jsfiddle.net/nhKwQ/它完美无缺(在Chrome 26中测试过),即使我点击了textarea。你能尝试将你的行为重现到小提琴吗?

在编辑时你是对的,它不再起作用了......

编辑::它适用于val()函数:

$(document).ready(function () {
    $('li').bind('dblclick', function () { //#accordion 

        var text = $(this).html() + "; ";
        $("textarea").val($("textarea").val() + text);

    });

});

http://jsfiddle.net/nhKwQ/1/

答案 1 :(得分:1)

作为问题#1的答案:

尝试以下列方式设置值,而不是追加方法。

$("[name=g]").val(text);

由于某种原因,它似乎失去了专注于textarea元素。

使用[name = g]时,它将查找具有该特定名称的元素并指定一个值。

您还可以使用以下内容更具体:

$("textarea[name=g]").val(text);

这也应该解决你的问题#3。

答案 2 :(得分:0)

第二个问题

var text = $(this).html()
此行中的

this指向`li元素,但在

var currenthtml = $(this).html(); 

thistextarea元素,而不是li元素

第3个问题。您必须手动将textarea的值恢复到之前的状态(使用.append()),没有撤消功能