【问题标题】:Check checkbox input manually in click handler在单击处理程序中手动检查复选框输入
【发布时间】:2017-05-08 00:32:16
【问题描述】:

所以我有这段代码 sn-p 来处理 input[type=checkbox] 上的点击事件。我想要实现的是手动设置 checked 属性,具体取决于 if 条件 scope.vm.checkedRows.indexOf(orderId) === -1 (这里的 false/true 分配被反转以说明这一点),但是它不起作用。

link: function(scope, element) {
    element.on('click', '.csv-ignore input', function(event) {
        scope.$apply(function() {
            var orderId = angular.element(event.target).closest('tr').data('order-id')
            if (scope.vm.checkedRows.indexOf(orderId) === -1) {
                scope.vm.checkedRows.push(orderId);
                event.target.checked = false;
            } else {
                scope.vm.checkedRows.splice(scope.vm.checkedRows.indexOf(orderId), 1);
                event.target.checked = true;
            }
        });
        return false;
    })
}

复选框不会被选中/取消选中。我发现有趣的是,然后我注释掉 return false 它工作正常。但是我最初添加了return false 以防止默认行为并手动选中/取消选中复选框。你知道这段代码有什么问题吗?

【问题讨论】:

  • event.preventDefault() ?并删除 return false?
  • 试过了,结果一样
  • 你为什么不做相反的事情呢?如果它是假的,或者如果它是真的,请取消它检查
  • 没关系。我有相反的条件只是为了测试
  • 尝试返回 event.target.checked

标签: javascript jquery html angularjs dom


【解决方案1】:

也许您可以直接在ng-checked 中输入一个表达式,然后在控制器的点击中执行其余操作。它将动态设置检查值

<input type="checkbox" ng-model="item" ng-checked="(vm.checkedRows.indexOf(orderId) !== -1)">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多