使用jQuery在Textarea中使用单个新行与新段落

时间:2013-03-11 13:45:10

标签: xml xslt unicode linefeed

我在Google Chrome浏览器上实现了一个名为Single New Line和New Paragraph的功能(在IE浏览器中我的解决方案正在工作,所以在IE上没有问题因为IE考虑Shift + Enter(\ r \ n)和Enter(\ n) )不同)。这个概念是,如果我按Shift + Enter,那么光标之后的行(文本)应该转到下一个(新的)行(\ r \ n),但它应该在同一段落中考虑。现在,如果我只输入Enter键,那么光标之后的行(文本)应该转到下一行(新)行(\ n),但这次应该被视为新段落。

现在我的问题是:默认情况下,Textarea根据jQuery API文档(http://api.jquery.com/val/)不考虑\ r \ n。它只考虑\ n我是按Shift + Enter还是只按Enter键。为了解决这个问题,我实现了一个名为

的钩子(在jQuery网站中给出)
$.valHooks.textarea = {
  get: function( elem ) {
    return elem.value.replace( /\r?\n/g, "\r\n" );
  }
};

然而它每次都会出现\ r \ n无关紧要我在Textarea上按什么键。我想区分Shift + Enter(\ r \ n)和仅输入(\ n)。但是如果放置了挂钩,那么每次添加\ r \ n是否按下Shirt + Enter或仅按Enter键。

在服务器端,现在很难确定如何考虑单个新行(\ r \ n)或新段落(\ n)?因为在这两种情况下都会从Chrome浏览器中发送\ r \ n组合。

基于Shift + Enter并且仅按下Enter键我将在服务器端区分它们。但如上所述,每次\ r \ n从Chrome发送到服务器。

以上整个问题仅适用于谷歌浏览器(它正在使用IE的所有版本)。

如果仍然遗漏上述问题的解释,请告诉我。

等待进一步的协助:)

1 个答案:

答案 0 :(得分:1)

我自己解决了。由于Chrome始终会返回\r\n,无论我们是ENTER还是SHIFT+ENTER。我根据我的要求做了一个技巧。

当用户按下SHIFT+ENTER时,我需要放置一个特殊的Unicode字符,为了达到这个目的,我使用了以下代码:

jQuery(txtInputControl).val(contentOfInputControl.substring(0,caretPositionOfCursor) +  String.fromCharCode(172) + contentOfInputControl.substring(caretPositionOfCursor,contentOfInputControl.length));

表示我在用户按下SHIFT+ENTER的内容中间放置了一个Unicode特殊字符。还要处理服务器端。这样我就可以从两边跟踪。