【问题标题】:How to replace the label of select with its value?如何用它的值替换select的标签?
【发布时间】:2012-08-26 05:54:38
【问题描述】:

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 应该怎么看??

【问题讨论】:

  • 如果再次选择 12 小时制时钟,您可能希望恢复原始标签?
  • 在这种情况下,我建议将 HTML 加倍。对每种格式使用一个选择,然后显示/隐藏。

标签: jquery html


【解决方案1】:

如果&lt;option&gt; 元素中同时具有label 属性和文本内容,则&lt;label&gt; 将优先。

您可以像这样将值复制到标签中:

$('#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 中)两者都不会导致控件更改其当前显示的值。它们仅在您再次单击 &lt;select&gt; 元素时出现。我还在努力……

编辑这是我的最终答案:

$("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】:

根据所选值更改标签的状态将永久更改它。我们需要存储对每个我们想要切换的值的引用,以方便使用,因此我们使用data 属性。

我不知道你是否可以访问 HTML,所以这里是 jQuery 来做我们需要的。

$('#default-start-time option').each(function(index,obj){
   $(obj).data('ampm', $(obj).prop('label'));
   $(obj).data('24hr', $(obj).val());
});

现在,在点击功能中,我们可以根据选择的值在数据属性之间切换。

$("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'));
      });
  }
});

Here is the fully working jsFiddle.

【讨论】:

  • @codebeginner 我很确定它可以工作,我什至更进一步,并提供了一个使用您提供的 HTML 的小提琴。
  • 这仍然遇到与我的答案相同的问题 - 在单击 &lt;select&gt; 之前,它不会更改当前显示的值。另外 - 你应该使用.prop('label', function() { ... }) 而不是.each
  • @Ohgodwhy sry 它确实有效,但它遇到了 ALnitak 所说的问题
【解决方案3】:

我建议加倍 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; }​

演示:http://jsfiddle.net/9ELJj/

【讨论】:

  • 作为解决方案的问题在于,它会复杂找出两个&lt;select&gt;标签中的哪一个实际上具有所需的值。
  • 真相。说到形式,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2020-06-03
相关资源
最近更新 更多