2014-01-10 47 views
0

我有负载填充此字符串文本区域:比较textarea的值和字符串?

//Example of use\r\n//var result = row['col'] + 10;\r\n//return result; 

然后,当用户完成,我想获得textarea的价值,并将其与初始值进行比较。但是,这条线始终返回false(initialString高于值):

if($("#textarea").val() == initialString) { ... } 

我敢肯定,这个问题是与“\ r \ n”,如VAL()更改。但是,您是否看到一种简单且跨浏览器的方式来比较这些字符串?或者我应该分割并循环每行一行?

这里是一个jsFiddle,正如您所见,警报始终返回false(http://jsfiddle.net/MCYbh/)。

问候!

+1

你能提供复制您的问题的jsfiddle? –

+0

当然!给我两秒钟! – NLemay

+3

这确实会失败,但为什么你需要它?换行符的显示方式可能因浏览器等而异,因此最简单的方法可能是在设置textarea后立即获取textareas值,然后再次将其与textareas值进行比较,这样它们肯定是相同的,除非用户键入一些东西。 – adeneo

回答

2

从textarea预先格式化得到值,然后再次将其与textareas值进行比较,并确保它是相同的,除非用户更改它。

$(document).ready(function() { 
    var initValue = "//Example of use\r\n//var result = row['col'] + 10;\r\n//return result;"; 

    $("#textarea").val(initValue); 
    initValue = $("#textarea").val(); 

    alert($("#textarea").val() == initValue); 

}); 

FIDDLE

+0

最优雅的跨浏览器示例。希望我可以再次升级。 – maccettura

0

AFAIK文本区域值换行符只是换行符'\ n'。

我不会逐行比较。您始终可以使用String.replace()替换'\ n \ r'。实际上,规范化行结束也将摆脱可能的跨浏览器问题。

+0

是的!它似乎工作!但是你确定它会在每个浏览器中都有效吗? val()总是只返回\ n? – NLemay

+1

不是。我知道它适用于Chrome,Firefox和较新的Internet Explorers。但是,更多的矿物只有三种可能性:'\ n'(Unix风格),'\ n \ r'(Windows风格)或'\ n'(MacIntosh风格)。所以如果你规范化行尾以便它们总是被'\ n'取代,你应该没问题。 –

0

您可以用文本区域中的值和初始值中的空白空间替换\r\n字符,然后进行比较。要更换\r\n字符空的空间,你可以使用正则表达式如下:

var str = "My string \r\n with new line \r\n characters"; 
str = str.replace(new RegExp(/\r?\n|\r/g)," "); 

这应该做的伎俩。在两个值上使用上述代码示例后,您可以比较文本区域值和初始值。