2015-11-10 3 views
0

Я использую компонент datepair.js, http://jonthornton.github.io/Datepair.js/, где пользователь может выбрать время начала в одном поле, а второе поле автоматически заполняется компонентами js. Я столкнулся с проблемой, когда поле, заполненное js, не отправляется angularjs. Если я вручную набираю символы, он отлично передает данные поля. Мне интересно, как это исправить.Angularjs не публикует полевые данные, заполненные JS

Код

<form method="post"> 
    <g:select class="form-control" required="true" name="requestType" ng-model="leaveRequest.requestType" from="${requestTypes}" optionKey="id" optionValue="name"/> 

    <p id="basicExample"> 

     <input type="text" class="date start" required="true" ng-model="leaveRequest.startDate"/> 
     <input type="text" class="time start" required="true" ng-model="leaveRequest.startTime"/> to 
     <input type="text" class="time end" required="true" ng-model="leaveRequest.endTime"/> 
     <input type="text" class="date end" required="true" ng-model="leaveRequest.endDate"/> 
    </p> 

    <button ng:click="addEvent()">Add Event</button> 
</form> 

Javascript

$scope.events = []; 

$scope.addEvent = function() { 
    $http.post('./calendar/save.json', $scope.leaveRequest) 
     .then(function(response) { 
      $scope.events.push(response.data); 
     }, function(response) { 
     // called asynchronously if an error occurs 
     // or server returns response with an error status. 
     }); 
}; 

ответ

1

Это, вероятно, будет что-то отношение к событию изменить входной является не срабатывает, когда значение создается с JavaScript/JQuery вами плагин.

Вы можете использовать директиву, которая обрабатывает запускающего это для вас, прежде чем ваша форма отправлена, например:

app.directive('formAutoFillFix', function() { 
    return function(scope, elem, attrs) { 

    elem.prop('method', 'POST'); 

    // Fix autofill issues where Angular doesn't know about autofilled inputs 
    if(attrs.ngSubmit) { 
     setTimeout(function() { 
     elem.unbind('submit').bind('submit', function(e) { 
      e.preventDefault(); 

      angular.forEach(elem.find('input'), function(el){ 
      el.dispatchEvent(new Event('input')); 
      }); 

      scope.$apply(attrs.ngSubmit); 
     }); 
     }, 0); 
    } 
    }; 
}); 

Fiddle: http://jsfiddle.net/U3pVM/20042/

Вы можете видеть, что без директивы в приведенном выше примере FormData является пустой.

выше код, который я отвечал на подобный вопрос с: Saved password in Firefox send empty fields

+0

Вот что я имел в виду этот вопрос, но не знал, как это исправить. Я добавил код, и я получаю следующую ошибку. ТипError: elem.find (...). TriggerHandler (...) не определено –

+0

triggerHandler - это функция jQuery. Я обновил свой ответ с версией, которая не зависит от jQuery, вместо этого используйте dispatchEvent(). – StuR

+0

В итоге я решил проблему с помощью следующего кода. elem.find ('вход') триггер ('вход'). –

Смежные вопросы