У меня есть страница, где пользователь может редактировать некоторые значения (имя, описание и т. Д.), Который отлично работает, за исключением того, что в качестве описания добавлена длинная строка.Обработка длинной строки в javascript
Когда пользователь меняет значение поля ввода, вызывается функция javascript для проверки того, отличаются ли значения от начального (когда сайт сначала загружается с PHP, начальные значения хранятся как переменные). Это выглядит следующим образом:
<script>
//checks if a field has changed value, if yes, change class
function check(div, text){
if(div.val()===text){
div.parent().removeClass("has-warning");
return 0;
} else{
div.parent().addClass("has-warning");
return 1;
}
}
</script>
*here goes the html stuff*
<script>
//whenever the form content changes
$('#horse1').bind('input', function() {
//the form div
var horseDiv = $('#horse1');
//count all the fields with changed value
var error = check(horseDiv.find($('#name')), 'Rinaldo')
+check(horseDiv.find($('#race')),'-')
+check(horseDiv.find($('#date')),'1988-01-01')
+check(horseDiv.find($('#use')), 'Showpferd')
+check(horseDiv.find($('#shortDesc')), 'short Description')
+check(horseDiv.find($('#description')),'This can be a long text over multiple lines');
//if there is at least one field with a
//changed value, display an error message
var errorDiv = horseDiv.find($('#notSaved'));
if(error==0){
errorDiv.hide();
} else{
errorDiv.show();
}
});
</script>
Так, во-первых, если кто-то имеет представление о том, как сделать это поведение более элегантный, я открыт для предложений.
Но проблема в том, что этот скрипт полностью перестает работать, если текст (описание) длиннее одной строки. Я не уверен, почему и как это решить, поэтому любая помощь будет очень признательна.
*** UPDATE: сравнение нескольких текстов строк в JavaScript
В случае, если кто имеет такую же проблему, вот решение, которое работает для меня:
var textNew = text.replace(/%0D/g, '');
var divNew = encodeURIComponent(div.val()).replace(/!/g, '%21')
.replace(/'/g, '%27')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29')
.replace(/\*/g, '%2A');
Переменная «текст» является rawlurlencode() Строка из php-Script и div.val() - это открытый текст, читаемый из текстового поля. С приведенным выше кодом textNew === divNew возвращает true, даже если они содержат запятые, umlaute, новые строки и другие неприятные вещи.
Укажите код PHP, который хранит значения в переменных JavaScript. – trincot