在javascript中处理长字符串
我有一个页面,用户可以在其中编辑一些值(名称、说明等),除非添加一个长字符串作为说明,否则效果很好 当用户更改输入字段的值时,会调用javascript函数检查是否有任何值与初始值不同(当站点首次加载PHP时,初始值存储为变量)。看起来是这样的:在javascript中处理长字符串,javascript,html,string,Javascript,Html,String,我有一个页面,用户可以在其中编辑一些值(名称、说明等),除非添加一个长字符串作为说明,否则效果很好 当用户更改输入字段的值时,会调用javascript函数检查是否有任何值与初始值不同(当站点首次加载PHP时,初始值存储为变量)。看起来是这样的: <script> //checks if a field has changed value, if yes, change class function check(div, text){ if(div.v
<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>
变量“text”是php脚本中的rawlurencode()字符串,div.val()是从textarea读取的纯文本。对于上面的代码,textNew===divNew返回true,即使它们包含逗号、umlaute、新行和其他讨厌的东西尝试将描述字符串传递到中以正确地转义它。当然它会停止工作 在PHP端,如果字符串中有换行符,则需要正确连接字符串
preg_replace( "/\r|\n/", "", $yourString );
朱丽叶,我认为最好使用event
change
而不是input
,而不需要立即检查文本是否已更改。浏览器将为您执行所有例行操作。您还需要知道脚本停止的原因(如果还不知道的话),您可以查看浏览器中“开发工具”窗格中的“控制台”选项卡。
如果您确实需要在用户按键后立即看到更改,我建议您使用字符串方法
localeCompare
下面是关于比较的答案
希望我能帮助你 我假设
#description
是一个
,因为您提到它可能是多行的
您发布的脚本应该包含字符\n
,而不是脚本中的实际换行符。要实现这一点,您需要在PHP中进行替换,但不是Lemmy发布的替换,因为它只是删除了换行符。您也可以像前面讨论的那样进行JSON编码
另外,请注意,在Windows上,浏览器将以\r\n
方式处理换行符,而不仅仅是\n
。在进行比较之前,您还需要在JS中执行替换以删除任何\r
字符来处理此问题
此外,您还可以执行
.find(“#选择器”)
而不是.find($(“#选择器”))
问题是关于JavaScript的。但问题出在PHP方面。PHP正在编写文本,因此需要对其进行转义,以便javascript能够正确解析。嗯,接下来的问题是:知道如何将div.val()与json字符串进行比较吗?(check函数显然不再工作)在check函数内部,如果您打印div和text变量,会显示什么?我花了很长时间,相同输出的解决方案最终是这样的: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');请提供将值存储在JavaScript变量中的PHP代码我尝试了更改,但没有成功问题是我需要对字符串进行json编码,以便将其作为参数传递感谢find的提示-dodopok的json版本起作用了,但check函数不再起作用,因为我不能将div.val()与现在json编码的文本进行比较。我在javascript中尝试了JSON.stringify,但是比较仍然不起作用。JSON编码的结果应该类似于“第一行\n第二行”
。这实际上是需要比较的字符串。检查(horseDiv.find(“#description”).replace(/\r/,”),“这可能是多行上的长文本”)
检查浏览器开发人员工具中的控制台。那里可能有更具体的信息。
preg_replace( "/\r|\n/", "", $yourString );