2

我在做什么

  • 目前我有一个包含多个输入和一个文本区域的表单。
  • 就在文本区域上方,我有一个div叫做表情符号
  • 此 div 包含可点击的表情符号

HTML

<form>
    <input name="example-1" type="hidden" value="spongebob" />
    <input name="example-2" type="hidden" value="gary"  />

    <div id="smilies">
        <div id="smilies-box">
            <img src="http://example.com/smilies/smile.gif" title=":)" />
        </div>
    </div>

    <textarea name="example-3"></textarea>

    <button>Post</button>
</form>

我想做的事

我的目标是,当单击任何图像时#smilies-box,将该图像的标题插入到textarea正下方。

目前我正在尝试以下 jQuery 但它没有找到textarea

jQuery

$(document).on("click", "#smilies-box img", function(){
    $(this).closest("textarea").val($(this).attr("title"));
});

我究竟做错了什么?

4

3 回答 3

3

closest()用于向上DOM 层次结构,而不是跨越或绕过。您可能会寻找的内容nextUntil().parent()

如果你想变得非常花哨,你可能会得到这样的东西为你工作:

$(document).on("click", "#smilies-box img", function(){
    $(this).closest(":has(textarea)").children().has(this).nextUntil('textarea').val($(this).attr("title"));
});
于 2012-10-23T01:15:26.807 回答
1

.closest ()将为您提供与选择器匹配的最接近的父级。而是寻找具有茶区的表格。像这样:

$(document).on("click", "#smiles-box img", function() {
   $this = $(this);
   $("textarea[name='example-3']", $this.closest("form"))
      .val($this.attr("title"));
});
于 2012-10-23T01:17:38.670 回答
0

我设法通过以下方式获得目标文本区域:

var targettextarea = $(this).parent().parent().parent().children('textarea');
于 2012-10-23T02:17:09.193 回答