我在同一页面上多次列出了以下代码,并且当单击单选按钮时,我希望能够在foo-title span元素中显示data-name值。问题在于,因为.foo-title跨度在DOM中是文本的数倍,因此文本在各处都更新,而不是在第1位。我尝试了几种方法,例如.parent().closest。 prev()但无法弄清楚。
标签以背景图片为样式,文本被隐藏,这就是为什么我要执行上述操作以向用户显示一些文本信息的原因。
的HTML
<div class="col-sm-4">
<p class="foo-title">
<span></span>
</p>
<ul class="foo-container-list">
<li class="foo-list-item">
<input class="foo-input" data-name="red" id="foo_id_1" name="foo_id" type="radio" value="1">
<label for="foo_id_1">red</label>
</li>
<li class="foo-list-item">
<input class="foo-input" data-name="green" id="foo_id_2" name="foo_id" type="radio" value="2">
<label for="foo_id_2">green</label>
</li>
<li class="foo-list-item">
<input class="foo-input" data-name="blue" id="foo_id_3" name="foo_id" type="radio" value="3">
<label for="foo_id_3">blue</label>
</li>
</ul>
</div>
JS
fooBar.updateFooName = function(foo) {
var fooName = foo.data('name');
if (fooName) {
$('.foo-title span').text(fooName);
}
};
$(document).ready(function() {
$("input[name=foo_id]:radio").change(function() {
fooBar.updateFooName($(this));
});
});
最佳答案
fooBar.updateFooName = function() {
var fooName = $(this).data('name');
if (fooName) {
$(this).closest('[class^="col-sm"]').find('.foo-title span').text(fooName);
}
};
$(document).ready(function() {
$("input[name=foo_id]:radio").change(fooBar.updateFooName);
});
FIDDLE