我想让用户双击我网页上的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()相反的方法?
答案 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);
});
});
答案 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();
this
是textarea
元素,而不是li
元素
第3个问题。您必须手动将textarea的值恢复到之前的状态(使用.append()
),没有撤消功能