【发布时间】:2016-11-24 05:19:30
【问题描述】:
我有一个页面,用户可以在其中编辑一些值(名称、描述等),除了添加长字符串作为描述外,这些值都可以正常工作。
当用户更改输入字段的值时,会调用一个 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>
首先,如果有人知道如何使这种行为更优雅,我愿意接受建议。
但是我遇到的问题是,如果文本(描述)超过一行,这个脚本就会完全停止工作。我不知道为什么或如何解决这个问题,所以任何帮助将不胜感激。
***更新:比较 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');
变量“text”是来自 php-Script 的 rawlurlencode() 字符串,而 div.val() 是从 textarea 读取的明文。使用上面的代码,textNew===divNew 会返回 true,即使它们包含逗号、变音符号、换行符和其他讨厌的东西
【问题讨论】:
-
请提供将值存储在 JavaScript 变量中的 PHP 代码
标签: javascript html string