选中 Backbone 中的复选框时禁用输入字段

Disable an input field when checking a checkbox in Backbone

我是 Backbone.js 和 jQuery 的新手,我试图在选中复选框时将表单的输入字段设置为 "disabled"。我不确定我是否必须按照下面代码中显示的方式进行操作,如果是这样,我应该在 disableInput 函数中做什么?

JS

events: {
    'change #myCheckbox': 'disableInput',
},

disableInput : function(){
...
}

HTML

<div class="x">
      <input type="text" id="myInput">
      <input type="checkbox" id="myCheckbox">
<div>

编辑:这可能看起来像是其他帖子的重复,但这些问题是关于我在这里使用 Backbone 的香草 JS,所以它不一样。

这是一个简单的衬垫 当然,我不熟悉 backbone.js,但您应该能够弄清楚如何合并它。

function disableInput(){
document.getElementById("myInput").disabled=document.getElementById('myCheckbox').checked
}
<div class="x">
      <input type="text" id="myInput">
      <input type="checkbox" onchange="disableInput();" id="myCheckbox">
<div>

如果您想走纯粹的 CSS 路线,您可以将复选框放在文本上方,然后使用 flexbox 根据您的喜好切换顺序。然后,您可以编写 CSS 更改复选框同级的 opacitypointer-events

.x {
  display: flex;
}

.x #myCheckbox {
  order: 2;
}

.x #myCheckbox:checked + #myInput {
  pointer-events: none;
  opacity: 0.6;
}
<div class="x">
  <input type="checkbox" id="myCheckbox">
  <input type="text" tabindex="-1" id="myInput">
</div>

选项卡问题

为了阻止某人在输入中使用 Tab 键,您可以在输入中添加 tabindex="-1"

我认为Backbone方式如下

events: {
    "change #myCheckbox": function() {this.disableInput.apply(this, arguments);}
},

disableInput: function(args) {
    var checked = $(args.target).is(":checked");
    this.$el.find("#myInput").disabled = checked;
}