Jquery知道为什么只有第一项可用
jquery cdoe why only available for first item?
我使用这个代码。
我需要点击一个区域来选择用户名来插入
$('#r_user').click(function(){
$('#reply_comment_textarea').val($('#reply_comment_textarea').val()+$(this).attr('alt'));
});
<li id="r_user" alt="@tommy ">...something</li>
用户正在规划点击li区域…
将获取插入文本区域的Alt内容(#reply_comment_textarea)
页面将有多个li#r_user和textarea#reply_comment_textarea
如…
<li id="r_user" alt="@tommy ">...something</li>
<li id="r_user" alt="@peter ">...something</li>
<li id="r_user" alt="@kate ">...something</li>
<textarea id="reply_comment_textarea"></textarea>
<li id="r_user" alt="@tom ">...something</li>
<li id="r_user" alt="@tony ">...something</li>
<textarea id="reply_comment_textarea"></textarea>
<li id="r_user" alt="@tommy ">...something</li>
<textarea id="reply_comment_textarea"></textarea>
我如何点击li#r_user将插入alt内容到下一个#reply_comment_textarea
现在mycode只适用于第一个li标签?
ID应该是唯一的,请求ID的选择器将只返回第一个ID。使用类代替。
把你的HTML改成:
<li class="r_user" alt="@tommy ">...something</li>
<li class="r_user" alt="@peter ">...something</li>
<li class="r_user" alt="@kate ">...something</li>
<textarea class="reply_comment_textarea"></textarea>
<li class="r_user" alt="@tom ">...something</li>
<li class="r_user" alt="@tony ">...something</li>
<textarea class="reply_comment_textarea"></textarea>
<li class="r_user" alt="@tommy ">...something</li>
<textarea class="reply_comment_textarea"></textarea>
并将JS更改为:
$('.r_user').click(function(){
var alt = $(this).attr('alt');
$(this).nextAll('.reply_comment_textarea').first().val(function(i, oldval) {
return oldval + alt;
});
});
演示 $(this).nextAll('reply_comment_textara')
选择您单击的元素后面的所有文本区域。然后.first()
选择第一个,所以点击将只更新文本区域下方的你点击。
同样,你不应该使用你自己的自定义属性;alt
不是li
元素的标准属性。要在DOM元素中存储特定于应用程序的数据,请使用data-XXX
属性,例如data-alt="@tommy "
,这些是专门为应用程序使用保留的。在jQuery中,你可以通过.data()
来访问它,例如$(this).data('alt')
。
将其更改为类定义:
$('#r_user').click();
$('.r_user').click();
<li class="r_user"></li>
不能对多个元素使用相同的id。jQuery现在有办法知道您在说什么。您可以直接附加到控件的单击事件。试试这个:
$('li').click(function(){
$('#reply_comment_textarea').val(
$('#reply_comment_textarea').val() +
$(this).attr('alt')
);
});
就像评论中说的,id在HTML中必须是唯一的。这就是为什么jQuery只选择第一个li。
你可以通过使用类来实现你想要的。我也不明白为什么你有多个文本区域。以下是修改后的版本:
<ul>
<li class="r_user" alt="@tommy ">...something</li>
<li class="r_user" alt="@peter ">...something</li>
<li class="r_user" alt="@kate ">...something</li>
<li class="r_user" alt="@tom ">...something</li>
<li class="r_user" alt="@tony ">...something</li>
<li class="r_user" alt="@tommy ">...something</li>
</ul>
<textarea id="reply_comment_textarea"></textarea>
注意我如何将id="r_user"
更改为class="r_user"
。这样,你可以有多个元素具有相同的类。
对于JS:
$('.r_user').click(function(){
var value = $('#reply_comment_textarea').val() + $(this).attr('alt');
$('#reply_comment_textarea').val(value);
});
此外,您可能不应该在LI元素上添加单击事件,在这种情况下使用a元素几乎总是更好,但这超出了本回答的范围。
- 如何从对象数组中获取最后一项
- 为什么只有最后一项显示,而不是全部显示
- 删除最后一项jquery
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- 为什么我的“for”循环只获取 html 中的最后一项
- 我无法将下拉列表的默认值设置为最后一项
- 流星批量插入仅插入最后一项
- 我怎么能知道元素是最后一项
- 如何删除WinJS组绑定列表的最后一项
- 在immutable.js中更改列表中的一项
- 使用handlers.js模板以数组中的最后一项为条件
- empty().append()追加循环中的最后一项
- jQuery只附加最后一项
- 将属性添加到 for 循环中的最后一项
- 我的应用仅显示一项检索到的数据
- 如何在 visjs 时间轴中按时间顺序获取 getVisibleItems(或如何获取上一项)
- 滑动视图 - 显示下一项的预览/片段
- 检查单词是否具有相同的字母 - 错过一项测试
- 如何按排序键顺序获取对象中的最后一项
- for 循环中的 addEventListener 始终添加到最后一项