#html #css #twitter-bootstrap #twitter-bootstrap-4
#HTML #css #twitter-bootstrap #twitter-bootstrap-4
Вопрос:
Есть ли встроенный способ (или плагин), который выделяет input
элементы, которые были изменены? До тех пор, пока входные данные не имеют своего исходного значения, входные данные будут каким-либо образом выделены (например, оранжевой рамкой). Можно пометить все входные данные как «неизмененные», используя JavaScript (например, вызываемый моей кнопкой «Сохранить изменения»).
Ответ №1:
Вы можете добавить прослушиватель change
событий для каждого input
элемента, чтобы добавить класс.
(function() {
var inputs = document.querySelectorAll("input");
for (var i = 0; i < inputs.length; i ) {
var initialValue = inputs[i].value;
inputs[i].addEventListener("change", function() {
if (initialValue !== this.value) {
this.classList.add("changed");
} else {
this.classList.remove("changed");
}
});
}
})();
.changed {
background-color: gold;
}
<form>
<input type="text" value="Initial Value">
<input type="text" value="Initial Value">
<button type="submit">
Save Changes
</button>
</form>
Если вы хотите выделить его после отправки, вы можете использовать этот класс в качестве селектора, чтобы добавить еще один с желаемым стилем.
Комментарии:
1. Я надеялся на что-то встроенное, но этого будет достаточно.
2. @Ricky спасибо! Любопытно, как мы могли бы заставить это вступить в силу без необходимости выхода из поля ввода?
3. @jason3w Вместо использования
change
типа события используйтеinput
:inputs[i].addEventListener("input", function() { ... })
4. спасибо, @Ricky за ответ. Я попробовал ваше предложение, однако мне все равно нужно убрать фокус с ввода, чтобы он сработал.
Ответ №2:
Вы могли бы использовать AngularJS:-
<!DOCTYPE html>
<html lang="en">
<style>
.red {
color:red;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="formCtrl">
<form novalidate>
First Name:<br>
<input ng-change="myFunc()" type="text" ng-model="user.firstName" id="change">
</form>
<p>The input field has changed {{count}} times.</p>
<p>form = {{user}}</p>
<p>master = {{master}}</p>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
$scope.master = {firstName:"John"};
$scope.reset = function() {
$scope.user = angular.copy($scope.master);
};
$scope.count = 0;
$scope.myFunc = function() {
$scope.count ;
document.getElementById("change").className = " red";
};
$scope.reset();
});
</script>
</body>
</html>
JSFiddle:-