如何使单击链接填充出现在其前面的输入元素的值
How can I make clicking a link populate a value of an input element that appears before it?
>我有以下内容:
<div class="btn-group">
<input disabled="disabled" id="dialogType">
<button data-toggle="dropdown" class="dropdown-toggle">
<span class="caret"></span>
</button>
<ul class="dropdown-menu" id="towns">
<li><a data-value="0Z" href="#">A</a></li>
<li><a data-value="10" href="#">B</a></li>
</ul>
</div>
<div class="btn-group">
<input disabled="disabled" id="dialogStatus">
<button data-toggle="dropdown" class="dropdown-toggle">
<span class="caret"></span>
</button>
<ul class="dropdown-menu" id="places">
<li><a data-value="22" href="#">C</a></li>
<li><a data-value="33" href="#">D</a></li>
</ul>
</div>
过去,我使用以下 javascript 在单击其中一个链接时填充 #town 标签字段:
$('#towns > li > a').click(function (e) {
e.preventDefault();
$('#town').text($(this).html())
});
现在我想让这个 javascript 适用于带有类下拉菜单的 DIV 内的任何类似 ul。
所以我想要的是:
- 当用户单击诸如A之类的链接时,btn组中的第一个输入元素将被赋予A的值和数据值"0Z"
- 当用户单击诸如D之类的链接时,该btn组中的第一个输入元素将被赋予D的值和数据值"33"
有人可以告诉我我怎么能做到这一点。我只需要上面函数的更通用版本。.
我
建议,尽管目前未经测试:
$('.dropdown-menu a').click(
function(e){
e.preventDefault();
var that = $(this),
dValue = that.attr('data-value');
that.closest('.btn-group').find('input:first').attr('data-value',dValue).val(dValue);
});
从本质上讲,这种工作方式是:
- 单击链接可阻止默认操作,
- 找到最近的
.btn-group
(祖先)元素, - 查找其中的第一个后代
input
元素, - 将
data-value
(分配给dValue
变量)分配给该input
的data-value
属性,最后 - 将
dValue
的值指定为该input
的value
。
根据OP留下的评论而编辑:
。我将有更多的 HTML 与加载 Ajax 的按钮组。对不起,我应该这么说。因此,我也应该使用"on"...
由于btn-group
元素是动态添加的,因此我建议进行以下更改:
$('#idOfBtnGroupParentElement').on('click','.dropdown-menu a',
function(e){
e.preventDefault();
var that = $(this),
dValue = that.attr('data-value');
that.closest('.btn-group').find('input:first').attr('data-value',dValue).val(dValue);
});
引用:
-
attr()
. -
closest()
. -
find()
. -
on()
-
val()
.
您可以使用.closest
查找与给定选择器匹配的单击元素的最接近的父元素。
要设置输入的值,请使用 .val
,要设置数据属性,请使用 .data
$('.btn-group a').click(function(e) {
e.preventDefault();
var input = $(this).closest('.btn-group').find('input');
input.val($(this).html());
input.data('value', $(this).data('value'));
});
这应该可以解决问题...
$(".dropdown-menu a").click(function(e){
e.preventDefault();
var value = $(this).data("value");
var text = $(this).html();
var input = $(this).parents(".btn-group").find("input");
input.data("value", value);
input.val(text);
});
我猜这和他们一样通用。我正在使用委托,因为我不知道你有多少这样的a
元素。
$('.btn-group').on('click', '.dropdown-menu a', function (e) {
var $this = $(this),
$input = $this.closest('.btn-group').find('input:first')
;
e.preventDefault();
$input.val($this.html())
.attr('data-value', $this.attr('data-value'))
;
});
请注意,我使用的是.on
,所以你应该使用 jQuery 1.7 或更高版本来使用它。如果没有,看看如何用delegate
老派来做。
$('ul.dropdown-menu a').on('click', function(e) {
e.preventDefault();
$(this).parent().parent().parent().find('input:first').val($(this).text()).attr('data-value', $(this).attr('data-value'));
});
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 名称输入的索引
- 如何编写HTML输入的JS内联
- 要求输入在数据列表中
- 如何在下面的ES6循环中获得前面的文本
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 如何将输入(type=text)从html表单传递到javascript函数
- 单击jquery清除输入值
- 而循环只设置php中输入字段中的第一个值
- 在输入字段中将最小金额设置为
- jQuery自定义验证比较多个输入的序列
- 在前面的输入元素之前添加html输入元素
- 在 AngularJS 中,如何在输入字段中输入有效数据时在输入字段前面显示绿色刻度线
- 表单字段输入编号通过在前面添加零来自动转换为 3 位数字
- 如何使单击链接填充出现在其前面的输入元素的值
- 在文本框中输入文本时,如果字母表前面有空格,请将字母表输入大写
- 附加到元素会使前面的子元素丢失输入数据
- AngularJS FORMs:根据前面的输入获取第二个SELECT BOX的Items