Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-复选框启用/禁用-带DB_Javascript_Jquery_Yii2 - Fatal编程技术网

Javascript jQuery-复选框启用/禁用-带DB

Javascript jQuery-复选框启用/禁用-带DB,javascript,jquery,yii2,Javascript,Jquery,Yii2,我想实现这个问题的解决方案:在yii2中,只是反转并与DB结合。反向意味着:我有一些复选框,如果选中了irep复选框,则应禁用所有其他复选框,否则应启用它们。所以我交换了$(“input.irep”).attr(“disabled”,true)和$(“input.irep”).removeAttr(“禁用”) irep存储在db中(作为bool/tinyint值1),如果我打开表单,应该禁用的字段仍将被启用,即使我向其中添加'disabled'=>$model->irep。如果我删除了else,

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

irep
存储在db中(作为bool/tinyint值1),如果我打开表单,应该禁用的字段仍将被启用,即使我向其中添加
'disabled'=>$model->irep
。如果我删除了else,几乎可以,但是取消选中不会重新启用其他复选框。你能给我指一下正确的方向吗?多谢各位

表格:

$script=

使用
.prop
而不是
.attr
查看原因

仅当
$model->irep
1
时添加
disabled
属性。您添加属性的方式值无关紧要,属性应该在那里,或者不应该在那里。值中的
1
0
使用
disabled
不会有任何效果,只会是相同的

那么为什么要在加载脚本的开头调用
enable_cb()
,您正在将此函数用于
#irep
上的单击事件。函数内的复选框为
this。选中的
对页面加载没有影响,对该函数的独立调用将使
this
指向
窗口
对象,而不是复选框

并避免使用
。单击
,选择
。在('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 =>'']) ?>
$script=irep?'disabled':'';

勾选
取消勾选
复选框是另一回事,禁用输入是另一回事,添加代码以显示实际操作,除了使用
activeCheckboxList将复选框设置为正确值之外,您无需做任何其他事情。我不希望其他复选框被选中ecked或UNCHECK,只是要启用或禁用。情况是一样的:第二次
intfg
extfg
被禁用,但之后它们被切换回自动启用。必须附加一些其他脚本。我在一个单独的视图中仅使用上述代码对其进行了测试,它工作正常,您使用了吗e答案中有相同的代码,没有额外的代码。现在我明白了,请添加您的完整视图@user2511599您已删除
enable_cb();
!:)。现在它开始工作了。非常感谢你!它的工作原理也是这样的:
'disabled'=>$model->irep
所以你不需要
$disabled=$model->irep吗残疾人士':''
您不应该执行
'disabled'=>$model->irep
这在逻辑上是错误的,正如我在回答中已经解释的,请阅读@user2511599的回答
$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 =>'']) ?>