【问题标题】:"Check" Multiple Checkboxes With Click & Drag?通过单击和拖动“检查”多个复选框?
【发布时间】:2021-06-04 23:08:48
【问题描述】:

我有一个表格,里面填满了这样的复选框:

我希望能够按住鼠标并拖动以激活多个复选框。我不知道从哪里开始:/我搜索了答案,但只找到了another thread 有人询问如何做,但没有答案。

HTML:

<table>
  <tbody>
    <tr>
      <td><input type="checkbox"></td>
      <td><input type="checkbox"></td>
      <td><input type="checkbox"></td>
    </tr>
    <!-- Repeat tr 2x -->
  </tbody>
</table>

jsFiddle: https://jsfiddle.net/CSS_Apprentice/ge1zx2yg/

另外,我更愿意保留&lt;input type="checkbox"&gt; 模型,因为重新设计我的系统会很耗时,但如果这不可能,我愿意接受其他选择。任何帮助将不胜感激!

【问题讨论】:

  • 恐怕我没有时间输入一些代码,但是您可以编写一个 JS 函数来更改鼠标悬停时框的 checked/unchecked 值。见this W3schools page
  • 有一个 NPM 包可以做到这一点:drag-check-js(免责声明:我是作者)。 Demo link.

标签: html checkbox


【解决方案1】:

<table>
  <tbody>
    <tr>
      <td><input id=1 onmouseover='check(1)' type="checkbox"></td>
      <td><input id=2 onmouseover='check(2)' type="checkbox"></td>
      <td><input id=3 onmouseover='check(3)' type="checkbox"></td>
    </tr>
    <tr>
      <td><input id=4 onmouseover='check(4)' type="checkbox"></td>
      <td><input id=5 onmouseover='check(5)' type="checkbox"></td>
      <td><input id=6 onmouseover='check(6)' type="checkbox"></td>
    </tr>
    <tr>
      <td><input id=7 onmouseover='check(7)' type="checkbox"></td>
      <td><input id=8 onmouseover='check(8)' type="checkbox"></td>
      <td><input id=9 onmouseover='check(9)' type="checkbox"></td>
    </tr>
  </tbody>
</table>

<script>
  function check(id)
  {
    if(mouseDown)
      {
        document.getElementById(id).checked = 1-document.getElementById(id).checked;
        // document.getElementById(id).checked = true;
        // ^ If you only want to turn them on, use this.
      }
  }
  
  var mouseDown = 0;
  document.body.onmousedown = function()
  { 
    ++mouseDown;
  }
  
  document.body.onmouseup = function()
  {
  --mouseDown;
  }
  // Credit to http://stackoverflow.com/questions/322378/javascript-check-if-mouse-button-down
</script>

或者,或者,使用下面的代码来避免 ID:

<table>
  <tbody>
    <tr>
      <td><input onmouseover='check(this)' type="checkbox"></td>
      <td><input onmouseover='check(this)' type="checkbox"></td>
      <td><input onmouseover='check(this)' type="checkbox"></td>
    </tr>
    <tr>
      <td><input onmouseover='check(this)' type="checkbox"></td>
      <td><input onmouseover='check(this)' type="checkbox"></td>
      <td><input onmouseover='check(this)' type="checkbox"></td>
    </tr>
	<tr>
      <td><input onmouseover='check(this)' type="checkbox"></td>
      <td><input onmouseover='check(this)' type="checkbox"></td>
      <td><input onmouseover='check(this)' type="checkbox"></td>
    </tr>
  </tbody>
</table>

<script>
  function check(box)
  {
    if(mouseDown)
      {
        box.checked = 1-box.checked;
		// box.checked = 1;
        // ^ If you only want to turn them on, use this.
      }
  }
  
  var mouseDown = 0;
  document.body.onmousedown = function()
  {++mouseDown;}
  document.body.onmouseup = function()
  {--mouseDown;}
  // Credit to http://stackoverflow.com/questions/322378/javascript-check-if-mouse-button-down
</script>

【讨论】:

  • edited - 您的帮助已经非常感谢,但我很好奇;我可以添加一个打开和关闭的数据属性,而不是使用 ID/onmouseover ID?
  • @CSS 对不起,我不太明白。你想让我在没有每个按钮的唯一 ID 的情况下试一试吗?
  • 不,你不必花时间在这上面,我已经对你的回答感到满意了 :) 这更适合现在学习。作为替代解决方案,我可以为此使用数据属性吗?喜欢data-checked="true"
  • @CSS 我用一个更好的替代方法修复了提交,如果这是您正在寻找的,可以删除 ID。如果您在预览时遇到问题,请尝试全屏或获取代码并将其放入外部 HTML 文档中。
猜你喜欢
  • 2022-01-13
  • 2021-04-10
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
相关资源
最近更新 更多