我有一個頁面,用戶可以編輯一些值(名稱,說明等),其工作時長字符串添加爲說明,除了罰款。處理長字符串的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>
所以,首先,如果有人有一個想法如何使這種行爲更優雅,我願意提出建議。
但我遇到的問題是,這個劇本完全停止工作,如果文本(說明)長於一行。我不知道爲什麼或如何解決這個問題,所以任何幫助將不勝感激。
***更新:在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()的字符串是從textarea中讀取的明文。使用上面的代碼,textNew === divNew返回true,即使它們包含逗號,不透明度,新行和其他討厭的東西
請提供用於存儲JavaScript變量值的PHP代碼 – trincot