【问题标题】:How to set radio button as hidden for the div如何将单选按钮设置为隐藏的div
【发布时间】:2017-04-03 02:03:28
【问题描述】:

我正在制作简单的反馈表,其中包含 3 个字段名称、评级(差、一般、好)和反馈评论。

在我的表单中,我希望用户一次选择一个评分并提交带有所选评分和反馈 cmets 的表单。
我为每个评级创建了<div> 元素,并将它们设置为无线电类型。
我不想在表单上显示单选按钮,但我希​​望我的 Div 表现得像单选按钮。

还有如何修复Divs的边框?
我附上截图。

第一个,我希望它如何显示,第二个是我当前的代码在 UI 上的显示方式。

下面是我的表单代码和 CSS

<div id="modal_wrapper">
  <div id="modal_window">

    <div style="text-align: right;"><a id="modal_close" href="#">close   <b>X</b></a></div>

    <p><Strong>We'd love your feedback.</Strong><br></p>

    <p>Your feedback will help us improve your experience. To protect your privacy, please do not enter personal or account information.</p>

    <form id="modal_feedback" method="POST" action="#" accept-charset="UTF-8">
      Your Name :<br>
      <input type="text" name="name" value=""><span></span><br>
      <div class="feedbackCl" >
        <input id="overall_0" name="overall" type="radio" value="1" tabindex="0" aria-describedby="o1-l">
        <label for="overall_0" class="labelClass">— —</label>
        <span class="screen_reader" id="o1-l">Poor</span>
      </div>
      <div class="feedbackCl">
        <input id="overall_1" name="overall" type="radio" value="2" tabindex="0" aria-describedby="o2-l">
        <label for="overall_1" class="labelClass">—</label>
        <span class="screen_reader" id="o2-l">Fair</span>
      </div>
      <div class="feedbackCl">
        <input id="overall_2" name="overall" type="radio" value="3" tabindex="0" aria-describedby="o3-l">
        <label for="overall_2" class="labelClass">+ —</label>
        <span class="screen_reader" id="o3-l">Good</span>
      </div>
      <br>
      <span><br></span><br>
      <textarea style="overflow-x: hidden;" id="gBann" name="message" maxlength="1000" rows="4" cols="85" placeholder="How can we improve our site? Please share your suggestions." onKeyUp="toCount('gBann','uBann','{CHAR} characters left',1000);" >
      </textarea><br>
      <span id="uBann" class="minitext" style="text-align: right;">1000 characters left</span><br> 
      <input type="submit" name="feedbackForm" value="Submit">
    </form>

  </div> 
</div>

CSS 代码

.feedbackCl {
  float: left;
  box-sizing: border-box;
  padding-top: 5px;
  width: 9%;
  text-align: center;
  height: 40px;
}

input[type="radio" i] {
  -webkit-appearance: radio;
  box-sizing: border-box;
}

.labelClass{
  margin-right: 0 !important;
  height: 28px;
  background-color: #fff !important;
  color: #0511ac;
  box-sizing: border-box;
}

【问题讨论】:

  • "我不想在表单上显示单选按钮,但我希​​望我的 Div 表现得像单选按钮"。你这是什么意思?单选按钮的“行为”的一部分是用户可以选择一个且只有一个选项。如果不显示它,就不可能让它像单选按钮一样“表现”。如果我理解正确,您需要在按钮上使用display: none,并使用 JavaScript 将 DIV 连接到等效的单选按钮选项。
  • 再说一次,如果要隐藏单选按钮,为什么还要它们?如果您不想要单选按钮,只需使用图像点击事件来记录评分。
  • 你想获得一个像单选按钮这样的 div 显示的帮助 css 吗? (1个div同时出现,其他div会消失)

标签: javascript jquery html css forms


【解决方案1】:

您可以执行以下操作:

$('.radio-group .feedbackCl').click(function(){
    $(this).parent().find('.feedbackCl').removeClass('selected');
    $(this).addClass('selected');
    var val = $(this).attr('data-value');
    $(this).parent().find('input').val(val);
    console.log('You have selected: '+val);
});
.feedbackCl {
    display: inline-block;
    width: 70px;
    height: 30px;
    border: 2px solid lightblue;
    cursor: pointer;
    margin: 2px 0;
    text-align: center;
    line-height: 30px;
}

.radio-group{
    position: relative;
}

.feedbackCl.selected{
    border-color: blue;
    background-color: orange;
}
span{
    display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="modal_wrapper">
  <div id="modal_window">

  <div style="text-align: right;"><a id="modal_close" href="#">close   <b>X</b></a></div>

  <p><Strong>We'd love your feedback.</Strong><br></p>

  <p>Your feedback will help us improve your experience. To protect your privacy, please do not enter personal or account information.</p>

  <form id="modal_feedback" method="POST" action="#" accept-charset="UTF-8">
  Your Name :<br>
  <input type="text" name="name" value=""><span></span><br>
   <div class="radio-group">
      <div class="feedbackCl" data-value="1">— —
          <span>Poor</span>
      </div>
      <div class="feedbackCl" data-value="2">-
          <span>Fair</span>
      </div>
      <div class="feedbackCl" data-value="3">+ —
          <span>Good</span>
      </div>
      <div class="feedbackCl" data-value="4">+
          <span>Very good</span>
      </div>
   </div>
   <br>
   <span><br></span><br>
   <textarea style="overflow-x: hidden;" id="gBann" name="message" maxlength="1000" rows="4" cols="85" placeholder="How can we improve our site? Please share your suggestions." onKeyUp="toCount('gBann','uBann','{CHAR} characters left',1000);" >
   </textarea><br>
   <span id="uBann" class="minitext" style="text-align: right;">1000 characters left</span><br>
   </form>

   </div> 
</div>

【讨论】:

  • 感谢分享。这个解决方案也对我有用。
【解决方案2】:

试试我的 sn-p!我不使用任何js代码,只使用html和css!希望对你有帮助!

.feedback{float:left;width:100%;margin-top:10px}
.feedbackCl{float:left;width:15%}
.feedbackCl>input[type="radio"]{display:none}
.feedbackCl>input[type="radio"]:checked+label>.sight{border:solid 2px #00f;background:orange}
.feedbackCl>label{width:100%;height:100%;display:inline-block;text-align:center}
.feedbackCl>label>.sight{width:100%;float:left;border:solid 1px #ccc;padding:10px 0;color:#00f;margin-left:1px}
.feedbackCl>label>.screen_reader{width:100%;float:left;padding-top:10px}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<div id="modal_wrapper">
  <div id="modal_window">

    <div style="text-align: right;"><a id="modal_close" href="#">close   <b>X</b></a></div>

    <p><Strong>We'd love your feedback.</Strong><br></p>

    <p>Your feedback will help us improve your experience. To protect your privacy, please do not enter personal or account information.</p>

    <form id="modal_feedback" method="POST" action="#" accept-charset="UTF-8">
      Your Name :<br>
      <input type="text" name="name" value=""><span></span><br>
      <div class="feedback">
        <div class="feedbackCl" >
        <input id="overall_0" name="overall" type="radio" value="1" tabindex="0" aria-describedby="o1-l">
        <label for="overall_0" class="labelClass">
          <span class="sight">— —</span>
          <span class="screen_reader" id="o1-l">Poor</span>
        </label>
      </div>
      <div class="feedbackCl">
        <input id="overall_1" name="overall" type="radio" value="2" tabindex="0" aria-describedby="o2-l">
        <label for="overall_1" class="labelClass">
          <span class="sight">—</span>
          <span class="screen_reader" id="o2-l">Fair</span>
        </label>
        
      </div>
      <div class="feedbackCl">
        <input id="overall_2" name="overall" type="radio" value="3" tabindex="0" aria-describedby="o3-l">
        <label for="overall_2" class="labelClass">
          <span class="sight">+—</span>
          <span class="screen_reader" id="o3-l">Good</span>
        </label>
      </div>
       <div class="feedbackCl">
        <input id="overall_3" name="overall" type="radio" value="3" tabindex="0" aria-describedby="o3-l">
        <label for="overall_3" class="labelClass">
          <span class="sight">+</span>
          <span class="screen_reader" id="o3-l">Very Good</span>
        </label>
      </div>
      </div>
      <br>
      <span><br></span><br>
      <textarea style="overflow-x: hidden;" id="gBann" name="message" maxlength="1000" rows="4" cols="85" placeholder="How can we improve our site? Please share your suggestions." onKeyUp="toCount('gBann','uBann','{CHAR} characters left',1000);" >
      </textarea><br>
      <span id="uBann" class="minitext" style="text-align: right;">1000 characters left</span><br> 
      <input type="submit" name="feedbackForm" value="Submit">
    </form>

  </div> 
</div>
</body>
</html>

【讨论】:

  • 我的荣幸! :)
【解决方案3】:

您可以向每个 div 添加一个 onClick 事件,而不是使用单选按钮,该事件将填充隐藏的输入。

<input type="text" name="name" value=""><span></span><br>

<div class="feedbackCl" onclick="setRating(1)">
  <label for="overall_0" class="labelClass">- -</label>
  <span class="screen_reader" id="o1-l">Poor</span>
</div>

<div class="feedbackCl" onclick="setRating(2)">
  <label for="overall_1" class="labelClass">-</label>
  <span class="screen_reader" id="o2-l">Fair</span>
</div>

Javascript

<script>
  function setRating(v) {
    document.getElementById('overall').value = v;
  }
</script>

【讨论】:

    【解决方案4】:

    我认为您希望使用无线电输入,因为您不知道另一种方法可以在提交时仅跟踪一个表单字段。

    在这里,我使用一个隐藏的输入字段来存储选择了哪个 div(差 - 中 - 好)。

    而且 div 很容易按照您的意愿设置样式。
    ;)

    $(".feedbackCl").on("click",function(){
      $(".feedbackCl").removeClass("selected").css({"opacity":1});;
      $(this).addClass("selected");
      $(".feedbackCl").not(".selected").css({"opacity":0.6});
      
      
      console.log("Value stored in the hidden input of the form: "+$(this).attr("id"));
      $("#feedbackResult").val( $(this).index() );
    });
    .feedbackCl {
      float: left;
      box-sizing: border-box;
      padding-top: 5px;
      width: 9%;
      text-align: center;
      height: 40px;
      border:1px solid grey;
      display:block;
    }
    .feedbackCl.selected{
      border:2px solid blue;
      
    }
    
    #poor{
      background-color:red;
    }
    #fair{
      background-color:yellow;
    }
    #good{
      background-color:green;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div id="modal_wrapper">
      <div id="modal_window">
    
        <div style="text-align: right;">
          <a id="modal_close" href="#">close   <b>X</b></a>
        </div>
    
        <p><Strong>We'd love your feedback.</Strong><br></p>
    
        <p>Your feedback will help us improve your experience. To protect your privacy, please do not enter personal or account information.</p>
    
        <form id="modal_feedback" method="POST" action="#" accept-charset="UTF-8">
          Your Name :<br>
          <input type="text" name="name" value=""><span></span><br>
          <br>
          <div class="feedbackCl" id="poor">
            Poor
          </div>
          <div class="feedbackCl" id="fair">
            Fair
          </div>
          <div class="feedbackCl" id="good">
            Good
          </div>
          <input type="hidden" id="feedbackResult" name="feedbackResult">
          <br>
          <br>
          <br>
          
          <textarea id="gBann" name="message" maxlength="1000" rows="4" cols="85" placeholder="How can we improve our site? Please share your suggestions." onKeyUp="toCount('gBann','uBann','{CHAR} characters left',1000);" ></textarea><br>
          <span id="uBann" class="minitext" style="text-align: right;">1000 characters left</span><br>
          <br>
          <input type="submit" name="feedbackForm" value="Submit">
        </form>
        <br>
      </div> 
    </div>

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 2014-08-02
      • 1970-01-01
      • 2013-04-05
      • 2016-06-29
      • 2014-06-05
      • 2012-02-18
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多