2012-04-01 35 views
1

在Balsamiq工作室&我做樣機他們有這個漂亮的小部件,它哪個HTML/JS小部件顯示此balsamiq控件?

  • 允許選擇一個值,出兩個值。作品真的很好地在觸摸屏上
  • 可用於顯示兩個值&突出顯示所選一個

實施例: Widget

什麼選項,來實現類似的窗口小部件,以通過HTML/CSS顯示在畫面& JS?

+0

不少,你有什麼試過的?你是否從搜索中找到任何東西? – 2012-04-01 19:56:00

+0

我曾看過http://jqueryui.com/demos/button/radio.html它確實希望我想要它。不過,我打開這個問題來了解這是一個不錯的選擇,還是有更好的選擇。 因此問題 – CuriousMind 2012-04-01 20:02:11

回答

2

我提出下面遍歷所有fieldset元件,並且如果所有的輸入是在其中的type="radio",隱藏它們和附加在其位置(的class="buttonRadio"span元件,使用從它們的相關label元件文本的方法。它還結合click事件所附span元素,並觸發對原input S上的change事件,還增加了「檢查」類的名字所點擊/觸摸元素,而從它的兄弟姐妹去除類是:

$('fieldset').each(
    function() { 
     var legend = $(this).find('legend').text(); 
     if ($(this).find('input').length == $(this).find('input[type="radio"]').length) { 
      var that = $(this), 
       len = that.find('input[type="radio"]').length; 
      for (var i = 0; i < len; i++) { 
       $('<span />') 
        .text($('label') 
          .eq(i).text()) 
        .addClass('buttonRadio') 
        .attr('data-fromID',that.find('input:eq(' + i + ')').attr('id')) 
        .appendTo(that); 
      } 
     } 
    }).on('click','.buttonRadio',function(){ 
     var id = $(this).attr('data-fromID'); 
     $(this).addClass('checked').siblings().removeClass('checked'); 
     $('#' + id).click().trigger('change'); 
    }).find('label, input[type="radio"]').css('display','none');​ 

這將使用以下CSS樣式這些元素:

.buttonRadio { 
    background-color: #fff; 
    padding: 0.5em 1em; 
    border: 1px solid #000; 
    margin: 0.5em 0 0 0; 
} 

.buttonRadio.checked { 
    background-color: #ffa; 
}​ 

JS Fiddle demo


編輯修改jQuery的一點:

  1. 緩存$(this)對象在這個版本早一點,
  2. 記得用我的第一個化身分配legend變量但忘了實際使用...嘆了口氣。
  3. 也藏在實際<legend></legend>元件:

    $('fieldset').each(
        function() { 
         var that = $(this), 
          legend = that.find('legend').text(); 
         $('<span />').text(legend).addClass('legend').appendTo(that); 
         if (that.find('input').length == that.find('input[type="radio"]').length) { 
          var len = that.find('input[type="radio"]').length; 
          for (var i = 0; i < len; i++) { 
           $('<span />') 
            .text($('label') 
             .eq(i).text()) 
            .addClass('buttonRadio') 
            .attr('data-fromID',that.find('input:eq(' + i + ')').attr('id')) 
            .appendTo(that); 
          } 
         } 
        }).on('click','.buttonRadio',function(){ 
         var id = $(this).attr('data-fromID'); 
         $(this).addClass('checked').siblings().removeClass('checked'); 
         $('#' + id).click().trigger('change'); 
        }).find('label, input[type="radio"], legend').css('display','none');​ 
    

JS Fiddle demo

參考文獻:

+1

+1,偉大的工作。 – 2012-04-01 20:27:08

+0

@SebastiánGrignoli:非常感謝你! =) – 2012-04-01 20:31:38

+0

令人驚歎!喜歡它:D – CuriousMind 2012-04-02 14:24:01