2016-07-22 10 views
0

変更イベントでscope.answers値を更新しようとしています。現在のリンク機能の値を変更することはできません。 $のscope.questionsで角度js:element.valが指示リンク機能で機能していません

ディレクティブ

function textControlDir() 
    { 
     return { 
      transclude: true, 
      restrict: 'E', 
      require:'ngModel', 
      /*scope: { 
       queObj: '=', 
       selectedAns: '=' 
       },*/ 
      template: '<div class="form-group">\n\ 
<label for="{{queObj._attributeName}}" class="col-sm-5 control-label">{{queObj._text}}</label>\n\ 
<div class="col-sm-6"><input type="text" name="{{name}}" class="form-control" id="{{id}}" value="{{selectedAns}}"></div>\n\ 
</div>' 
      , 
      link: function (scope, element, attrs,ngModel) 
      { 
       var queObj = scope.que.QuestionData; 
       scope.queObj = scope.que.QuestionData; 
       scope.name = queObj._attributeName; 
       scope.id = queObj._attributeName; 
       var selectedAns = ''; 
       if(scope.answers) 
       { 
        selectedAns = scope.answers[scope.name]; 
       } 
       if(selectedAns && selectedAns != '') 
       { 
        scope.selectedAns = selectedAns; 
       } 
       else 
       { 
        scope.selectedAns = scope.queObj._pageAttributes.defaultValue; 
       } 

       element.bind('change',function(){ 
        scope.answers[scope.name] = document.getElementById(scope.id).value;//element.value(); 
        console.log(scope.answers[scope.name]); 
        scope.$apply(); 
       }) 
      } 
     }; 
    } 

HTML

<div ng-repeat="que in questions[$state.current.name]"> 
         <div ng-if="que.QuestionData._fieldType === 'text'" > 
          <text-control-dir data-que-obj="que.QuestionData" data-ng-model="answers[que.QuestionData._attributeName]"></text-control-dir> 
         {{answers[que.QuestionData._attributeName]}} 
         </div> 
         <div ng-if="que.QuestionData._fieldType === 'select'" > 
          <select-control-dir data="que.QuestionData"></select-control-dir> 
         </div> 
         <div ng-if="que.QuestionData._fieldType === 'radio'" > 
          <radio-control-dir data="que.QuestionData"></radio-control-dir> 
         </div> 
         <div ng-if="que.QuestionData._fieldType === 'hidden' && que.QuestionData._attributeName != 'CBQ'" > 
          <hidden-control-dir data="que.QuestionData"></hidden-control-dir> 
         </div> 
        </div> 

すべての質問があり、私はindex.htmlの中でループしています。質問ごとに私は入力を作成しています。もし$ scope.answersが特定の入力に対して値を持っていたら、私は入力ボックスに表示しています。これは多く働いています。今私は入力ボックスに何かを変更した場合、答えに値を設定したい。

コードの下

(element.val;未定義います)指令の動作していない

   element.bind('change',function(){ 
       scope.answers[scope.name] = document.getElementById(scope.id).value;//element.value(); 
       console.log(scope.answers[scope.name]); 
       scope.$apply(); 
      }) 

答えて

1

jqLiteオブジェクトは、あなたが呼び出す必要がval方法があります。

scope.answers[scope.name] = element.val(); 
+0

TypeError例外を:element.valueです関数ではない –

+0

申し訳ありませんが、関数であるvalです。 – dfsq

+0

これは関数(arg1、arg2)を出力します上記のコードでは、入力ボックスの値を得るにはどうすればいいですか –

関連する問題