使用angular.element(document.querySelector(id))更改复选框值时,模型值不会反映出来.attr('checked',true);

时间:2017-02-20 13:04:13

标签: javascript angularjs

我有一个逻辑,就像我有四个复选框,它们应该像现有代码一样。逻辑正在发挥作用但我确实使用语法检查并取消选中。

 angular.element(document.querySelector('#c_'+j)).attr('checked', true);

 angular.element(document.querySelector('#c_'+j)).attr('checked', false); 

未反映在相应复选框元素的模型值中。您可以查看附带的屏幕截图。前三个框被检查但是它显示“真实”的实际点击元素休息仍为“假”。我需要更新的模型值。任何人都可以提供帮助!

以下是工作示例https://plnkr.co/edit/zA5V9gc6jTpPq3pIuvC8?p=preview

enter image description here

3 个答案:

答案 0 :(得分:1)

您应该对$scope 进行操作,以实现双向绑定。

因此,您的功能将更改为,

function rangeCal(arg, bool){
    var tmparray= [];
    var selectedcheckbox;
    for(var propt in arraymatrix){
      tmparray = arraymatrix[propt];
      for(var i=0; i <= tmparray.length; i++){
        if(month === tmparray[i]){
          selectedcheckbox = propt;

          var a = 'c_'+selectedcheckbox;
          $scope[a]= true
          var gap = arg.split('_')[1];
          if(!bool){
            for(var j=propt; j<= gap; j++){

              var j = 'c_'+j;
              $scope[j]= true
            }
          }else if(bool) {
            for(var k=propt; k<= gap+1; k++){
               if(k > gap){
                var k = 'c_'+k;
                $scope[k]= false
               }

                var j = 'c_'+j;
                $scope[j]= true
            }
          }
        }
      }
    }

HERE IS THE WORKING PLUNKER

答案 1 :(得分:0)

您可以替换

 angular.element(document.querySelector('#c_'+j)).attr('checked', true);

 var index = 'c_'+j;
 $scope[index]= true

以及通过false代替true

取消选中的相同流程

答案 2 :(得分:0)

检查此代码段,希望这就是您要找的内容。它适用于两种操作,检查和取消选中。

function rangeCal(arg, bool){
  var tmparray= [];
  var selectedcheckbox;
  for(var propt in arraymatrix){
    tmparray = arraymatrix[propt];
    for(var i=0; i < tmparray.length; i++){
      if(month === tmparray[i]){
        selectedcheckbox = propt;
          angular.element(document.querySelector('#c_'+selectedcheckbox)).attr('checked', true);
        var gap = arg.split('_')[1];
        if(!bool){
          for(var j=propt; j<= gap; j++){
            var cb_id = "c_"+j;
            $scope[cb_id] = true;
            // angular.element(document.querySelector('#c_'+j)).attr('checked', true);
          }
        }else if(bool) {
          for(var k=4; k>= gap; k--){
             var gap_id = "c_"+k;
             $scope[gap_id] = false;
            // angular.element(document.querySelector('#c_'+gap)).attr('checked', false);
          }
        }
      }
    }
  }
  setTimeout(function(){
    console.log($scope);
  }, 2000);
}