【问题标题】:jQuery - checkbox enable/disable - with DBjQuery - 复选框启用/禁用 - 与 DB
【发布时间】:2019-10-17 04:10:15
【问题描述】:

我想在yii2中实现问题的解决方案:jQuery - checkbox enable/disable,只是逆向结合DB。反转意味着:我有一些复选框,如果选中 irep 复选框,则应禁用所有其他复选框,否则应启用它们。所以我交换了$("input.irep").attr("disabled", true);$("input.irep").removeAttr("disabled");

irep 存储在 db 中(作为 bool/tinyint 值 1),如果我打开表单,即使我添加 @987654326,应该禁用的字段仍将启用@给它。如果我删除 else 它几乎可以,但取消选中不会重新启用其他复选框。你能指出我正确的方向吗?谢谢。

表格:

$script = <<< JS

$(function() {
  enable_cb();
  $("#irep").click(enable_cb);
});

function enable_cb() {
  if (this.checked) {
    $("input.irep").attr("disabled", true);
  } else {
    $("input.irep").removeAttr("disabled");
  }
}

JS;
$this->registerJs($script);

<?= $form->field($model, 'irep')->checkbox(['id' => 'irep']) ?>
<?= $form->field($model, 'intfg')->checkbox(['class' => ['irep'], 'disabled' => $model->irep]) ?>
<?= $form->field($model, 'extfg')->checkbox(['class' => ['irep'], 'disabled' => $model->irep]) ?>

【问题讨论】:

  • checkun-check 复选框是另一回事,禁用输入是另一回事,添加代码以显示您实际在做什么,除了设置之外,您无需为此做任何事情使用 activeCheckboxList 选择正确值的复选框
  • 我不希望其他复选框被选中或取消选中,只是被启用或禁用。

标签: javascript jquery yii2


【解决方案1】:

使用.prop 而不是.attr 请参阅here 为什么

仅当$model-&gt;irep1 时才添加disabled 属性,您添加属性的方式该值无关紧要,属性应该存在或者它不应该是10使用disabled 时该值将无效。

那你为什么在加载脚本的开头调用enable_cb(),你正在使用这个函数来处理#irep上的点击事件this.checked函数内部的检查没有效果使用独立调用函数的页面加载将有 this 指向 window 对象而不是复选框。

避免使用.click,而更喜欢.on('click' 来代替事件委托。

您的代码应如下所示

$script = <<< JS
$(function(){
    $("#irep").on('click',enable_cb);
});

function enable_cb() {
  if (this.checked) {
    $(".irep").prop("disabled", true);
  } else {
    $(".irep").prop("disabled",false);
  }
}
JS;

$this->registerJs($script);

//add disabled attribute
$disabled = $model->irep ? 'disabled' : '';

<?= $form->field($model, 'irep')->checkbox(['id' => 'irep']) ?>
<?= $form->field($model, 'intfg')->checkbox(['class' => ['irep'], $disabled=>'']) ?>
<?= $form->field($model, 'extfg')->checkbox(['class' => ['irep'], $disabled =>'']) ?>

【讨论】:

  • 它发生了同样的情况:一秒钟 intfgextfg 被禁用,但之后它们被切换回自动启用。
  • 必须附加一些其他脚本我在单独的视图中仅使用上述代码对其进行了测试,并且它可以正常工作,您是否使用了相同的代码并且答案中没有额外的代码。请添加您的完整视图@user2511599
  • 您已删除 enable_cb(); ! :) 现在我明白了。现在它正在工作。非常感谢!
  • 它也像这样工作:'disabled' =&gt; $model-&gt;irep 所以你不需要$disabled = $model-&gt;irep ? 'disabled' : '';
  • 不应该'disabled' =&gt; $model-&gt;irep这在逻辑上是错误的,因为我已经在答案中解释了请阅读答案@user2511599
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多