HTML:
<input type="radio" name="timeformat" id="timeformat-a" value="am/pm" checked="checked" /> <b>am/pm</b>
<input type="radio" name="timeformat" id="timeformat-b" value="24 hours" /> <b>24 hours</b>
<select id="default-start-time" class="select check-list">
<option value="" label="--Select--">--Select--</option>
<option value="00:00" label="12:00 AM">12:00 AM</option>
<option value="00:30" label="12:30 AM">12:30 AM</option>
<option value="01:00" label="01:00 AM">01:00 AM</option>
<option value="01:30" label="01:30 AM">01:30 AM</option>
<option value="02:00" label="02:00 AM" selected>02:00 AM</option>
<option value="02:30" label="02:30 AM">02:30 AM</option>
</select>
当我选择24小时格式时,应显示选项值。
jquery的:
$("input[name='timeformat']").click(function() {
if($(this).val()=='24 hours')
{
// code which replaces label with the option value
}
});
jquery应该怎么看?
答案 0 :(得分:1)
根据所选值更改标签的状态将永久更改它。我们需要存储对每个我们想要在易于使用的内容中切换的值的引用,因此我们使用data
属性。
我不知道你是否可以访问HTML,所以这里是jQuery来做我们需要的。
$('#default-start-time option').each(function(index,obj){
$(obj).data('ampm', $(obj).prop('label'));
$(obj).data('24hr', $(obj).val());
});
现在,在click函数中,我们可以根据所选的值在数据属性之间切换。
$("input[name='timeformat']").click(function() {
if($(this).val()=='24 hours')
{
$('#default-start-time option').each(function(index,obj){
$(obj).prop('label', $(obj).data('24hr'));
});
}
else
{
$('#default-start-time option').each(function(index,obj){
$(obj).prop('label', $(obj).data('ampm'));
});
}
});
答案 1 :(得分:1)
如果您在label
元素中同时拥有<option>
属性和文字内容,则<label>
将具有优先权。
您可以将值复制到标签中,如下所示:
$('#default-start-time option').attr('label', function() {
return this.value;
});
类似地,您可以将文本内容复制回标签,如下所示:
$('#default-start-time option').attr('label', function() {
return this.innerHTML;
});
请参阅http://jsfiddle.net/alnitak/cLuZa/
请注意(至少在Chrome中)都不会导致控件更改其当前显示的值。它们仅在您再次单击<select>
元素时出现。我还在努力......
编辑这是我的最终答案:
$("input[name='timeformat']").click(function() {
var ampm = $(this).val() !== '24 hours'; // get mode
var sel = $('#default-start-time')[0]; // get the <select> element
$('option', sel).attr('label', function() {
return ampm ? this.innerHTML : this.value;
});
sel.selectedIndex += 0; // force refresh
});
答案 2 :(得分:0)
我建议加倍HTML并简化JS:
HTML:
<input type="radio" name="timeformat" value="12" checked="checked" /> <b>am/pm</b>
<input type="radio" name="timeformat" value="24" /> <b>24 hours</b>
<select id="format-12" class="">
<option value="" selected>--Select--</option>
<option value="12:00 AM">12:00 AM</option>
<option value="12:30 AM">12:30 AM</option>
<option value="01:00 AM">01:00 AM</option>
<option value="01:30 AM">01:30 AM</option>
<option value="04:00 PM">04:00 PM</option>
<option value="05:30 PM">05:30 PM</option>
</select>
<select id="format-24" class="hide">
<option value="" selected>--Select--</option>
<option value="00:00">00:00</option>
<option value="12:30">12:30</option>
<option value="01:00">01:00</option>
<option value="01:30">01:30</option>
<option value="16:00">16:00</option>
<option value="17:30">17:30</option>
</select>
JS:
$("input[name='timeformat']").on('change', function(){
$('select[id*=format-]').toggleClass('hide');
});
CSS:
.hide { display: none; }