根据用户输入设置选中的复选框

2023-12-31

我有这些 HTML 元素:

<div>
    <form>
        <div class="form-group">
            <label class="control-label"></label>
            <input type="text" value="1100" class="myCars">
        </div>
    </form>
    <form>
        <div class="form-group">
            <label class="control-label"></label>
            <input type="text" value="0011" class="myCars">
        </div>
    </form>
</div>

这是我的复选框:

var elem = $('.myCars');
var car = ['car1', 'car2', "car3", "car4"];
var container = '<ul class="cars">';

for (i = 0; i < car.length; i++) {
    container += '<li>' +
        '<label class="container ' + car[i] + '">' +
        '<input type="checkbox">' +
        '<span class="checkmark"></span>' +
        '</label>' +
        '</li>';

}
container += '</ul>'
elem.closest('div').append(container);

配置复选框后,我想遍历所有输入并将复选框设置为选中,其中输入值为 1

我已经尝试过这个:

$('.myCars').each(function() {
    var arr = $(this).val()
    var array = arr.split('')
    // array values: 
    Array(4)["1", "1", "0", "0"]
    Array(4)["0", "0", "1", "1"]

    $('.myCars').prop('checked', function(index) {
        return +array[index] === 1;
    });
})

我怎样才能让它发挥作用?


您的问题的一个可能的答案是:

// select the .myCars elements, and bind the anonymous function
// of the on() method as the event-handler for the 'input'
// event:
$('.myCars').on('input', function() {

  // retrieve the entered value, and then use String.prototype.trim()
  // to remove leading/trailing white-space:
  let enteredValue = $(this).val().trim(),

    // convert that String into an Array, using
    // String.prototype.split('') (as in your own posted code), then
    // use Array.prototype.map() to iterate over every Array value
    // with a call to the Number() function to convert the entered
    // values to Numbers:
    valueArray = enteredValue.split('').map(Number);

  // navigate to the closest ancestor <div> element:
  $(this).closest('div')
    // find the <input type="checkbox"> elements:
    .find('input[type=checkbox]')
    // update the 'checked' property using the anonymous function,
    // here we pass in the index of the current element:
    .prop('checked', function(index) {
      // we return the assessment of whether the array-value at
      // the current index is exactly equal to 1 (if true this
      // checks the check-box, if false it unchecks the box, or
      // leaves it unchecked); this is why we used the call to
      // Array.prototype.map(Number) earlier:
      return valueArray[index] === 1;
  });

// triggering the 'input' event so the checkboxes are updated
// on page load:
}).trigger('input');
var elem = $('.myCars');

var car = ['car1', 'car2', "car3", "car4"];
var container = '<ul class="cars">';

for (i = 0; i < car.length; i++) {
  container += '<li>' +
    '<label class="container ' + car[i] + '">' +
    '<input type="checkbox">' +
    '<span class="checkmark"></span>' +
    '</label>' +
    '</li>';

}
container += '</ul>'
elem.closest('div').append(container);

$('.myCars').on('input', function() {
  let enteredValue = $(this).val().trim(),
    valueArray = enteredValue.split('').map(Number);
  $(this).closest('div').find('input[type=checkbox]').prop('checked', function(index) {
    return valueArray[index] === 1;
  });
}).trigger('input');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <form>
    <div class="form-group">
      <label class="control-label"></label>
      <input type="text" value="1010" class="myCars">
    </div>
  </form>
  <form>
    <div class="form-group">
      <label class="control-label"></label>
      <input type="text" value="0011" class="myCars">
    </div>
  </form>
</div>

JS 小提琴演示 https://jsfiddle.net/davidThomas/rz5e2Lvs/.

上面的替代方案如下,仅使用普通的 DOM API。请注意,在这种方法中我使用了<template>元素,而不是创建一个 HTML 字符串并包装整个<form>中的元素one <form>:

// using let, rather than var, as personal preference in this
// case; using document.querySelectorAll() to retrieve a
// non-live NodeList of the elements matching the supplied
// CSS selector:
let elems = document.querySelectorAll('.myCars'),
  car = ['car1', 'car2', "car3", "car4"],

  // using `document.createElement()` to create the <ul>:
  container = document.createElement('ul');

// retrieving the content of the <template> element, accessed
// via its id (using a CSS selector), and the content property:
template = document.querySelector('#carCheckboxes').content,

  // creating an InputEvent:
  inputEvent = new Event('input'),

  // defining the function to handle updates to the checkboxes,
  // passing in the Event Object (here referred to as 'e'):
  updateCheckmarks = (e) => {

    // e.currentTarget is the element to which the event-listener
    // is bound:
    let source = e.currentTarget,

      // here we retrieve the value of the current element,
      // use String.prototype.trim() to remove the leading/
      // trailing white-space, use String.prototype.split('')
      // to convert the String to an Array of characters, and
      // and finally a call to Array.prototype.map(Number)
      // (as above) to convert the array-entries into numbers:
      value = source.value.trim().split('').map(Number),

      // here we find the check-boxes, navigating to the
      // closest ancestor <div>:
      checkmarks = source.closest('div')
        // and finding the <input type="checkbox"> elements within:
        .querySelectorAll('input[type=checkbox]');

    // using Array.prototype.forEach() to iterate over that Array;
    // check: the (user defined name for) the current <input> element,
    // index: the (user defined name for) the index of the current
    // <input> in the Array over which we're iterating:
    checkmarks.forEach(function(check, index) {

      // here we set the checked property to true/false,
      // depending on the following assessment:
      check.checked = value[index] === 1;
    });
  };

// iterating over the car Array, using Array.prototype.forEach():
car.forEach(function(el) {

  // cloning the content template, including descendant elements
  // using Node.cloneNode(true):
  let model = template.cloneNode(true);

  // appending that cloned node to the container:
  container.appendChild(model);
})

// iterating over the elems Array:
elems.forEach(
  // using an Arrow function; 'el' is the (user defined name
  // for) the current element of the Array of elements:
  (el) => {

    // appending a cloned container Node to the closest
    // ancestor <div> element:
    el.closest('div').appendChild(container.cloneNode(true));

    // binding the updateCheckmarks() function as the
    // event-handler for the 'input' event:
    el.addEventListener('input', updateCheckmarks);

    // firing the inputEvent (created earlier) on the
    // the current element, in order to trigger the
    // function on page-load:
    el.dispatchEvent(inputEvent);
  });
let elems = document.querySelectorAll('.myCars'),
  car = ['car1', 'car2', "car3", "car4"],
  container = document.createElement('ul');
template = document.querySelector('#carCheckboxes').content,
  inputEvent = new Event('input'),
  updateCheckmarks = (e) => {
    let source = e.currentTarget,
      value = source.value.trim().split('').map(Number),
      checkmarks = source.closest('div').querySelectorAll('input[type=checkbox]');
    checkmarks.forEach(function(check, index) {
      check.checked = value[index] === 1;
    });
  };

car.forEach(function(el) {
  let model = template.cloneNode(true);
  container.appendChild(model);
})

elems.forEach(
  (el) => {
    el.closest('div').appendChild(container.cloneNode(true));
    el.addEventListener('input', updateCheckmarks);
    el.dispatchEvent(inputEvent);
  });
<template id="carCheckboxes">
  <li>
  <label>
    <input type="checkbox"><span class="checkmark"></span>
  </label>
  </li>
</template>
<div>
  <form>
    <div class="form-group">
      <label class="control-label"></label>
      <input type="text" value="1010" class="myCars">
    </div>
    <div class="form-group">
      <label class="control-label"></label>
      <input type="text" value="0011" class="myCars">
    </div>
  </form>
</div>

关于你的问题,评论里 https://stackoverflow.com/questions/53115315/set-checkboxes-checked-based-on-user-input/53115730#comment93127434_53115771,到另一个答案:

[我]可以[如何]使用onClick更改每个复选框的值? [因为]当[I]这样做时,所有输入中的复选框的值都会发生变化。

这可以使用:

// while this code - in my example - runs after the <input>
// elements are created, and appended to the DOM, we're
// binding the event-handler, using the on() method, to
// already-existing elements; so here we select the <form>
// element, and bind the anonymous function of the on()
// method as the 'change' event-handler:
$('form').on('change', function(e) {

  // caching variables:
  let form = $(this),
      valuesInput = form.find('.myCars'),

      // finding the <input type="checkbox"> elements within
      // the <form> element:
      checkboxValues = form.find('input[type=checkbox]')

        // using map() - the jQuery method - to iterate over
        // the collection to form an Array-like Object:
        .map(function(index, el) {

          // here we return 1 (if the current element is checked),
          // or 0 if it is not checked:
          return el.checked ? 1 : 0;
    // using the get() method to convert the Array-like Object
    // into an Array:
    }).get()
    // using join() to convert that array into a String, passing
    // in an empty string ('') to act as the joining characters
    // (if no argument is passed the default is a comma):
    .join('');

  // updating the value of the <input class="myCars"> element:
  valuesInput.val(checkboxValues);

// firing the 'change' event on page-load so that the value of
// the text-input reflects the checked/unchecked state of the
// checkboxes:
}).trigger('change');
let elem = $('.myCars'),
    car = ['car1', 'car2', "car3", "car4"],
   container = '<ul class="cars">';

for (i = 0; i < car.length; i++) {
  container += '<li>' +
    '<label class="container ' + car[i] + '">' +
    '<input type="checkbox">' +
    '<span class="checkmark"></span>' +
    '</label>' +
    '</li>';

}
container += '</ul>'
elem.closest('div').append(container);

$('.myCars').on('input', function() {
  let enteredValue = $(this).val().trim(),
      valueArray = enteredValue.split('').map(Number);
  $(this).closest('div').find('input[type=checkbox]').prop('checked', function(index) {
    return valueArray[index] === 1;
  });
}).trigger('input');

$('form').on('change', function(e) {
  let form = $(this),
      valuesInput = form.find('.myCars'),
      checkboxValues = form.find('input[type=checkbox]').map(function(index, el) {
        return el.checked ? 1 : 0;
    }).get().join();
    
  valuesInput.val(checkboxValues);
}).trigger('change');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <form>
    <div class="form-group">
      <label class="control-label"></label>
      <input type="text" value="" class="myCars">
    </div>
  </form>
  <form>
    <div class="form-group">
      <label class="control-label"></label>
      <input type="text" value="0011" class="myCars">
    </div>
  </form>
</div>

参考:

  • CSS:
    • 属性选择器 https://www.w3.org/TR/2018/PR-selectors-3-20180911/#attribute-selectors.
  • JavaScript:
    • Array.prototype.forEach() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach.
    • Array.prototype.join() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join.
    • Array.prototype.map() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map.
    • HTMLTemplateElement https://developer.mozilla.org/en-US/docs/Web/API/HTMLTemplateElement.
    • HTMLTemplateElement.content https://developer.mozilla.org/en-US/docs/Web/API/HTMLTemplateElement/content.
    • Node.cloneNode() https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode.
    • Number() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number.
    • String.prototype.split() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split.
    • String.prototype.trim() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim.
  • HTML:
    • <template> https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template.
  • jQuery:
    • closest() http://api.jquery.com/closest/.
    • find() http://api.jquery.com/find/.
    • get() http://api.jquery.com/get/.
    • map() http://api.jquery.com/map/.
    • on() http://api.jquery.com/on/.
    • prop() http://api.jquery.com/prop/.
    • trigger() http://api.jquery.com/trigger/.
    • val() http://api.jquery.com/map/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据用户输入设置选中的复选框 的相关文章

  • 在 JavaScript/ActionScript 中重新定义 Math.constructor 有任何实际用途吗?

    Math 对象没有原型属性 但有构造函数属性 在任何情况下重新定义构造函数会有用吗 The Math对象 准确地说 由初始值引用的对象MathECMAScript 全局对象的属性 not have a constructor属性 请参阅EC
  • 如何使用 JavaScript 禁用滚动条?

    当我仅在 Internet Explorer 7 中显示代表模式窗口的 div 时 我需要锁定浏览器滚动条 谷歌搜索我发现我可以使用document body style overflow hidden 但这不适用于 IE7 我也尝试过do
  • 透明、无边框文本输入

    如何删除周围的边框
  • 如何使网站适应用户的屏幕分辨率?

    我正在使用 1024x768 屏幕分辨率来设计我的网站 当您从屏幕分辨率较小 较大的计算机上的浏览器中查看网站时 网站开始变形 无论用户的屏幕分辨率是什么 如何使网站适应用户的屏幕分辨率 我相信通过 JavaScript 或 CSS 是可能
  • 为什么 "asdf".replace(/.*/g, "x") == "xx" ?

    我偶然发现了一个令人惊讶的 对我来说 事实 console log asdf replace g x Why two替代品 似乎任何没有换行符的非空字符串都会产生此模式的两个替换 使用替换函数 我可以看到第一个替换是整个字符串 第二个替换是
  • 变量值的 swap() 函数[重复]

    这个问题在这里已经有答案了 我无法达到下面这个交换函数的预期结果 我希望将值打印为 3 2 function swap x y var t x x y y t console log swap 2 3 任何线索将不胜感激 您的函数正在内部交
  • JavaScript 匿名函数语法

    下面两个块有什么区别 block 1 console log anonymous block block 2 function anon console log anonymous block 2 我在 Netbeans 中运行了这个 使用
  • 创建响应式眼睛焦点图标

    我一直在尝试制作响应式彩色眼睛焦点图标 但到目前为止我所尝试的一切均不成功 我试图在某种程度上复制真眼的颜色 我使用边框 框阴影来获取颜色 但该部分没有缩放 也尝试过轮廓 但也失败了 那个甚至不是圆的 div 的高度当前是静态的 但我希望它
  • iOS 11 getUserMedia 不起作用?

    苹果公司发表声明称getUserMedia将在 iOS 11 上完全正常运行 安装 iOS 11 Beta 版本 5 后 我确实收到一条消息 表明我的网站请求访问我的相机和麦克风 但似乎是这样的 video src window URL c
  • 将 jQuery 单击处理程序添加到多个元素?

    我需要有一个for在我的 jQuery 中循环 Example for i 0 i
  • CheckboxFor 不与嵌套对象绑定

    当模型中嵌套的对象中定义属性时 CheckBoxFor 不受限制 这是一个例子 我有一个SearchOptions模型包含一个List
  • Electron Auth0Lock“原始文件://不允许”

    尝试让 auth0 与我的电子应用程序一起使用 当我按照默认教程并尝试使用用户名 密码 身份验证进行身份验证时 锁定失败并显示 403 错误 并响应 不允许使用 Origin file 我还在 auth0 仪表板中客户端设置的允许来源 CO
  • IE7 问题 - 当禁用文件下载自动提示时无法下载流式文件

    我的应用程序是基于 J2EE JSP Servlet 的 当我尝试从 JSP 打开新窗口 弹出窗口 并调用 Servlet 操作 例如 Streamer do 以在该弹出窗口内传输 PDF 文件时 我遇到了问题 问题 当 IE 7 gt 工
  • jQuery可排序发布数据,但没有数据

    谁能告诉我我在这里缺少什么 我的数据似乎总是空的 我做错了什么 document ready function nav sortable connectWith nav axis y update function event ui var
  • (A == B == C) 比较在 JavaScript 中如何工作?

    我预计以下比较会给出错误 var A B 0 if A B 0 console log true else console log false 但奇怪的是它又回来了false 更奇怪的是 console log A B 1 returns
  • 如何在不刷新页面的情况下更新页面 html 和 url

    我想知道是否有人可以指出我学习如何在不刷新页面的情况下更新页面 html 和 url 的方向 是否有任何现有的 javascript 库可以处理这个问题 或者有一本涵盖此类事情的好书 这是使用该效果的示例网站 http onedesignc
  • Angular Material 10 范围 datepicker 和 moment.js 错误:date.getFullYear 不是函数

    尝试使用 moment js 的 rangePicker 选项来实现 Angular Material v10 datepicker 但是当我将 moment 与 rangePicker 结合使用时 它给了我这个错误 Error date
  • 查看元素的所有 dom 事件

    我有一个 jQuery UI 日期选择器 当您单击日期时 它会清除我的 URL 哈希值 并且不会更改文本框中的日期 我假设某个地方还有其他一些 JavaScript 实用程序 它也正在调用某种委托事件 抛出错误并终止 jquery 处理程序
  • HTML:JavaScript:阻止表单提交并调用 Javascript 函数

    我想在按下表单中的提交按钮时进行 AJAX 调用 事实上我无法删除
  • 如何在jsp页面中包含javascript

    我是 J2EE 和 Web 开发的新手 这是我的问题 我想在网页中包含 angular js 这是有效的版本 但我也想要一些本地的 javascript 文件 并且希望我想在本地目录中导入 angularjs

随机推荐

  • 如何在 Android 平板电脑 Chrome 中隐藏工具栏以获得 100% 高网站

    我正在尝试制作一个 100 屏幕宽度和 100 屏幕高度 长宽比为 16 9 的 Web 应用程序 如果我能够在平板电脑上全屏查看该网站 那就太棒了 但不幸的是 屏幕上的工具栏占用了大量空间 使我的网站既不能以全高也不能以全宽显示 现在我知
  • 在项目中使用 ShareKit 时,本地化字符串并不总是有效

    因为我从我的应用程序中删除了一些本地化 所以我遇到了这个问题 第一次加载我的应用程序时 我在标签中看到我的密钥的本地化字符串 第二次加载应用程序时 出现 xxxxxkey 下次加载应用程序时 一切都很好 显示本地化字符串 怎么会这样 如果有
  • 如何在 Swift 包管理器中添加本地库作为依赖项

    如何在 Swift 包管理器中添加本地库 a 文件 作为依赖项 我尝试在我的 Package swift 中添加 dependencies Dependencies declare other packages that this pack
  • Google SignIn 在应用程序中,无需将其添加到设备帐户中

    我们一直通过 WebView 使用 Google 登录 但由于 Google 很快就会弃用此功能 是否有其他替代方法可以做到这一点 我们有一个稍微特殊的用例 我们的设备在仓库中使用 并且一台设备由多个用户使用 我们不希望所有用户将他们的帐户
  • UIBarButtonSystemItem PageCurl 不随工具栏改变颜色

    我想改变导航栏和工具栏的颜色 但是卷页系统图标的颜色UIBarButtonSystemItemPageCurl不随工具栏色调颜色改变 如果我使用书签等其他系统图标 它们会改变 有人有解决此类问题的方法吗 我使用以下几行来更改导航栏和工具栏的
  • 如果访问X86系统中不存在的物理地址怎么办?

    我正在开发一个 Linux 内核模块 它通过处理进程的页表将物理地址范围映射到进程虚拟地址空间 然后 我脑子里有一个问题 如果PTE指向一个不存在的物理地址会发生什么 例如 我的 X86 笔记本电脑有 8GB DRAM 如果 PTE 的值为
  • Flexbox div 不占据整个宽度

    我试图理解如何display flex有效 但每当我设置它时 孩子们都不会占据整个宽度 我预计三个 div 会占据屏幕宽度的 33 我究竟做错了什么 flexbox display flex flexbox div border 1px s
  • 创建一个 DateTimeOffset,设置为与服务器不同时区的午夜

    我有一个设置为 EST 的服务器 我想知道我需要做什么来创建设置为当天午夜但在不同时区的 DateTimeOffset 例如太平洋标准时间 获取相关的TimeZoneInfo 构造一个DateTime其中包含local时间 即午夜 Call
  • C++(11):如果两者都很好,何时使用直接初始化或复制初始化

    在重复的呼喊开始之前 我知道以下问题 以及其他一些问题 与此问题非常相关 在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a differ
  • 使用 android 捕获按键

    如何使用 android SDK 捕获手机按键 我已经环顾了几个小时没有找到任何东西 例如 在某些情况下 我想在用户按下手机上的 挂断 按钮时捕获消息 然后在消息到达操作系统之前将其丢弃 这可能吗 您可以处理视图中的关键事件 也可以处理整个
  • C 中 read() 和 fgets() 之间的区别

    我想从标准输入流中读取数据 使用 read 或 fgets 从 stdin 流读取有什么区别吗 我用 fgets 附加了以下两段代码并阅读 有了fgets 我可以使用java程序轻松地编写和读取c程序 通过读写 我的 java 程序挂起 等
  • 如何一次将多个值分配给一个结构体?

    我可以在 Foo 结构体的初始化中执行此操作 Foo foo bunch of things initialized 但是 我不能这样做 Foo foo foo bunch of things initialized 那么 两个问题 为什么
  • 如何使用 React.js 在 Botframework v4 聊天应用程序中执行发送“打字指示器”?

    我正在使用 botframework v4 构建一个聊天应用程序 以 React js 作为前端 以 net core 作为后端来生成令牌 我想使用 React 在我的聊天中实现 Typing 指示器 尝试使用 window WebChat
  • Ubuntu 上的 rpy2 安装

    我对 Linux 还很陌生 在安装 Rpy2 时遇到了一些严重的问题 我通过突触包管理器安装了旧版本的 Rpy2 但我需要更新版本并将其删除 如 Rpy2 文档中所述 Rpy2 目录中的所有文件 我下载了tar gz 来自 SourceFo
  • 如何使用 Timer 创建时钟?

    我正在尝试创建一个七段显示 它使用计时器以及 ActionListener 和 actionPerformed 自动移动 我认为如果我使用 for if 语句 它会自动从 0 循环到 2 并为每个数字段设置背景颜色 但是 当我显示它时 它停
  • HtmlAgility:没有出现任何内容(C#,UWP)

    我尝试使用 htmlagilitypack 来解析表格 完成后我意识到我忘记证明 htmlagility 部分是否有效 很明显它不起作用 我也不知道我错过了什么 我在哪里做错了 因为我是初学者 所以请不要对我太严厉 public parti
  • 获取资源错误

    每次我在主要活动中调用 getResources 时 都会导致错误并且应用程序被迫退出 如果我调用 getApplicationContext getResources 甚至在 Eclips 中的全新项目中也会发生这种情况 在通话之前我需要
  • 使用 CSS 替换 ul 项目符号点样式

    我想替换 ul 列表的列表样式类型属性 以便外部是一个圆盘 然后一个内部 ul 列表是一个圆 再一个内部是一个圆盘 依此类推 本质上 我想要的是这样的 ul li Lorem ipsum li li ul li Lorem ipsum li
  • 如何将匿名类型转换为已知类型

    我有一个匿名类型变量 该变量是从另一个函数获取的 我们无法更改它 var a property1 abc property2 def 我有一堂课 class Myclass string property1 string property2
  • 根据用户输入设置选中的复选框

    我有这些 HTML 元素 div div