如果选中复选框,则绑定文本框值

bind a textbox value if checkbox is checked

如何根据条件将文本框值传递给控制器​​。 如果选中复选框,则将文本框与对象值绑定并传递给控制器​​,否则只需将其留空并将用户输入传递给控制器​​。我正在做的是行不通的。我的代码有什么问题,如果选中复选框,它就可以正常工作。

$scope.Product = [
        {"ProductID":12,"LNumber":"hrx",weght:"2"},
        {"ProductID":13,"LNumber":"pty",weght:"1"}
    ]

<div>
<div>
  <input type="checkbox" data-ng-model="Copyknotes" />
  <span >Copy notes from</span>
</div>

<table data-ng-repeat="Item in Product track by $index">                                          
   <tr >
     <td>                                              
        <input type="radio" name="groupName_{{Item.ProductID}}"  data-ng-model ="Item.isSelected"  />
     </td>
     <td data-ng-if="Copyknotes == true">
       <input type="text" data-ng-model="Item.LNumber">
      </td>
      <td data-ng-if="Copyknotes == false" id="hi">
      <input type="text" data-ng-model="Item.LNumber=""">
       </td>
       </tr>
</table>
</div>

使用scope.function

<input type="checkbox" data-ng-model="Copyknotes" ng-change="changeValue(Copyknotes)" />

//Code should be inside Angular js controller
$scope.changeValue = function(Copyknotes){
   if(Copyknotes)
   {
     //Manipulate text box value here
     $scope.Item.LNumber = 'whatever';
   }
}

这是一个例子: https://plnkr.co/edit/3Vtl6roWfL1ZqaR2nEvf

<td data-ng-if="Copyknotes == false">
    <input type="text" data-ng-model="Item.NNumber" ng-init="Item.NNumber = ''">
</td>

表达式错误 - data-ng-model="Item.LNumber="""" - 如果你想分配一个新值,你可以使用 Item.LNumber = "''"(双引号内有两个单引号)以避免干扰标签属性“”符号。我已经做了一个活生生的例子来说明如何做到这一点。不知道您的控制器是否需要输入的原始值,因此新值(未选中复选框时)改为保存到 NNumber。如果需要,您可以自由地将它们更改为 LNumber。此外,当输入呈现在视图中时,ng-init 指令用于启动对象的 NNumber 参数。 您还应该定义 Copyknotes 进行比较。或者像 ng-if="Copyknotes", ng-if="!Copyknotes".

这样写你的条件
<input type="checkbox" data-ng-model="Copyknotes" ng-change="changeValue(Copyknotes)" />

首先删除 data-ng-model 并使用以下内容:

      //Code should be inside Angular js controller
        var oninput = null;
        $scope.changeValue = function(Copyknotes){
           if(Copyknotes)
           { 
             var oninput = document.getElementById("textbox").onchange =function(){
       $scope.item.LNumber = this.value;
           }
             //Manipulate text box value here

           }else{
             $scope.Item.LNumber = '';
             oninput = null 
           }
        }

只需使用

data-ng-init=""

而不是

data-ng-model="Item.LNumber=""" 

使用

data-ng-model="Item.LNumber"


<table data-ng-repeat="Item in Product track by $index">                                          
   <tr >
     <td>                                              
        <input type="radio" name="groupName_{{Item.ProductID}}"  data-ng-model ="Item.isSelected"  />
     </td>
     <td data-ng-if="Copyknotes == true">
       <input type="text" data-ng-model="Item.LNumber">
      </td>
      <td data-ng-if="Copyknotes == false" id="hi">
      <input type="text" data-ng-model="Item.LNumber" data-ng-init="">
       </td>
       </tr>
</table>