当输入位于标签内时,更新无线电标签文本
Update radio labels text when inputs are inside labels
我有两组单选按钮。第一个是时间框架(月/计费周期),第二个是时间周期(3个月/6个月/9个月/12个月)。当我将"时间框架"更改为"计费周期"选择时,"时间周期"单选标签应更新为"3个周期"等。将"时间帧"切换回"月","时间期限"标签更新为"三个月"等。
$("input[name=timeFrame]").on("change", function() {
var tframe = $(this).val();
var oldtext = "Months";
var newtext = "Cycles";
if (tframe === "months") {
oldtext = "Cycles";
newtext = "Months";
}
var tperiods = $("#timePeriods label");
$.each(tperiods, function(idx, val) {
var newLabel = $(this).text().replace(oldtext, newtext);
$(this).text(newLabel);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<label for="timeFrameMonths">
<input type="radio" id="timeFrameMonths" name="timeFrame" value="months" checked="checked" />Months
</label>
<label for="timeFrameCycles">
<input type="radio" id="timeFrameCycles" name="timeFrame" value="cycles" />Billing Cycles
</label>
</div>
<br/>
<div id="timePeriods">
<label for="timePeriod3">
<input type="radio" id="timePeriod3" name="timePeriod" value="3" checked="checked" />3 Months
</label>
<label for="timePeriod6">
<input type="radio" id="timePeriod6" name="timePeriod" value="6" />6 Months
</label>
<label for="timePeriod9">
<input type="radio" id="timePeriod9" name="timePeriod" value="9" />9 Months
</label>
<label for="timePeriod12">
<input type="radio" id="timePeriod12" name="timePeriod" value="12" />12 Months
</label>
</div>
当无线电输入在标签内时,如何更新标签的文本?
注意,如果输入在标签之外,那么上面的代码将非常有效。我正在寻找一些适用于当前HTML结构的jQuery代码。
下面是.destrict()函数,用于在label
文本替换为新文本之前,将输入元素删除并保存到$input
变量中。最后,使用.prepend()方法将保存的$input
变量附加回标签中,作为标签中的第一项。
$("input[name=timeFrame]").on("change", function() {
var tframe = $(this).val();
var oldtext = "Months";
var newtext = "Cycles";
if (tframe === "months") {
oldtext = "Cycles";
newtext = "Months";
}
var tperiods = $("#timePeriods label");
$.each(tperiods, function(idx, val) {
$input = $(this).find("input").detach();
var newLabel = $(this).text().replace(oldtext, newtext);
$(this).text(newLabel);
$(this).prepend($input);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<label for="timeFrameMonths">
<input type="radio" id="timeFrameMonths" name="timeFrame" value="months" checked="checked" />Months
</label>
<label for="timeFrameCycles">
<input type="radio" id="timeFrameCycles" name="timeFrame" value="cycles" />Billing Cycles
</label>
</div>
<br/>
<div id="timePeriods">
<label for="timePeriod3">
<input type="radio" id="timePeriod3" name="timePeriod" value="3" checked="checked" />3 Months
</label>
<label for="timePeriod6">
<input type="radio" id="timePeriod6" name="timePeriod" value="6" />6 Months
</label>
<label for="timePeriod9">
<input type="radio" id="timePeriod9" name="timePeriod" value="9" />9 Months
</label>
<label for="timePeriod12">
<input type="radio" id="timePeriod12" name="timePeriod" value="12" />12 Months
</label>
</div>
您已经为每个<label>
使用了for
属性,因此不需要用<label>
包装<input>
元素。你所需要做的就是打开包装,你就有了工作代码。看看:JSFiddle。
- 如果您必须在不展开的情况下进行,请将
.text()
替换为.html()
。请查看以下内容:JSFiddle
HTML
<div>
<label for="timeFrameMonths">
<input type="radio" id="timeFrameMonths" name="timeFrame" value="months" checked="checked" />Months</label>
<label for="timeFrameCycles">
<input type="radio" id="timeFrameCycles" name="timeFrame" value="cycles" />Billing Cycles</label>
</div>
<br/>
<div id="timePeriods">
<label for="timePeriod3">3 Months</label>
<input type="radio" id="timePeriod3" name="timePeriod" value="3" checked="checked" />
<label for="timePeriod6">6 Months</label>
<input type="radio" id="timePeriod6" name="timePeriod" value="6" />
<label for="timePeriod9">9 Months</label>
<input type="radio" id="timePeriod9" name="timePeriod" value="9" />
<label for="timePeriod12">12 Months</label>
<input type="radio" id="timePeriod12" name="timePeriod" value="12" />
</div>
jQuery
$("input[name='timeFrame']").on("change", function() {
var tframe = $(this).val();
var oldtext = "Months";
var newtext = "Cycles";
if (tframe == "months") {
oldtext = "Cycles";
newtext = "Months";
}
var tperiods = $("#timePeriods label");
$.each(tperiods, function(idx, val) {
var newLabel = $(this).text().replace(oldtext, newtext);
$(this).text(newLabel);
});
});
您可以在<span>
:中包装要更改的文本
<label for="timePeriod3">
<input type="radio" id="timePeriod3" name="timePeriod" value="3" checked="checked" />
<span class='labelText'>3 Months</span>
</label>
然后:
var tperiods = $("#timePeriods label");
$.each(tperiods, function(idx, val) {
var newLabel = $(this).text().replace(oldtext, newtext);
$(this).find(".labelText").text(newLabel);
});
前几天看到这个问题,想知道为什么不使用之类的东西
$("input[name=timeFrame]").on("change", function () {
var val = $(this).val();
$('#timePeriods label').each(function () {
if (val == 'cycles') $(this).html($(this).html().replace('Months', 'Cycles'))
if (val == 'months') $(this).html($(this).html().replace('Cycles', 'Months'))
})
});
相关文章:
- 如何在更新面板内部调用/触发javascript函数<触发器>标签
- 当输入位于标签内时,更新无线电标签文本
- 使用 jQuery(移动)更新多个选择标签
- 变量中的值未在标签标记中更新
- Riot Js更新标签
- 更新条形图并删除标签
- 更新标签数组时如何对其进行排序
- 在Meteor.js中通过同一路线内的锚点标签更新视图
- 如何使用输入模糊事件更新多个具有相同类名的标签的文本
- 在不刷新的情况下更新标签内的变量
- 更新 DOM 中的标签
- 异步更新标签时出现问题
- 如何根据用户在文本框中键入的内容更新标签文本
- Javascript 在更新面板和向导中设置标签文本重置
- 如何在 d3 中动态更新文本标签
- 在道场中编码,1.得到错误所有者文档 null 或不是对象,2.按钮标签更改后未更新
- 选中了“标签更新”复选框
- 使用 javascript 更新 html
- 如何更新还包含输入元素的标签文本
- 如何更新p的标签:在primefaces中ajax调用后,在不关闭组件的情况下选择CheckboxMenu