【问题标题】:Copying text from textarea to another textarea将文本从 textarea 复制到另一个 textarea
【发布时间】:2011-01-15 09:48:38
【问题描述】:

我有两个文本区域(ta1ta2)。我想要的是ta2 来模仿ta1 中的文字。这很容易,但我还需要一些其他功能。

ta1 有一个 keypress (jQuery) 事件,它检查某些单词并替换它们。例如,如果我在 ta1 中键入 something,它将被替换为 something else。我想要的是存储在ta2 中输入的原始文本,而不替换文本。

如果用户所做的只是输入字符或按退格键,这很容易。当用户将光标移动到文本中间的某个位置并开始输入时,就会出现问题。或者当用户选择一堆文本并将其删除并开始输入时。有谁知道这个问题的解决方案吗?


编辑:为了使这一点更清楚,这就是我使用它的目的。我想要类似于 Facebook 的“你在想什么?”特征。

所以用户可以输入@something,当他们从动态生成的下拉列表中选择时,它会用一些东西替换@something。所以说用户输入“你好@something你好吗?”然后显示的文本将变为“你好,你好吗?”

但是,我仍然需要保留“Hello @something 你好吗?”某处,因为我有一个底层 div 样式“某物”具有背景颜色。它显然也需要为“@firstname secondname”之类的东西工作。希望能把事情弄清楚一点。

【问题讨论】:

  • 如果用户在 ta1 中编辑修改后的文本(例如“其他”示例中的“其他”),ta2 中的预期行为是什么?
  • 如果用户将文本“something else”修改为“something el”,那么 ta2 应该持有“something el”。
  • 那么我认为我没有正确理解您的问题。你说,“我想要的是将最初键入的文本存储在 ta2 中,而不是替换文本。”这是否意味着在上述编辑之前,ta1 会有“something else”,ta2 会有“something”,然后在编辑之后,他们都会有“something el”?
  • 正确。抱歉,我没有想到那种情况 - 另一个问题。
  • 谢谢。会尝试更多。祝你好运。

标签: jquery textarea


【解决方案1】:

UPD: 此代码动态更新 t1 中的文本,替换如下标记:"[b]sometext[/b]" => "<b>sometext</b>" 并将 "[b]sometext[/b]" 复制到 t2

<?php
    if (array_key_exists("encode", $_GET) && strlen($_GET["encode"]) > 0)
    {
        $text = $_GET["encode"];
        $s = preg_replace("/\[b\](.*)\[\/b\]/i", "<b>\\1</b>", $text);

        echo $s;

        die;
    } else
    if (array_key_exists("decode", $_GET) && strlen($_GET["decode"]) > 0)
    {
        $text = $_GET["decode"];
        $s = preg_replace("/<b>([^<]{1,})<\/b>/i", "[b]\\1[/b]", $text);

        echo $s;

        die;
    } else
    if ((array_key_exists("decode", $_GET) && strlen($_GET["decode"]) <= 0) || (array_key_exists("encode", $_GET) && strlen($_GET["encode"]) <= 0))
    {
        echo "";

        die;
    }
?>

<html>
 <head>
  <script type="text/javascript" src="jquery.js"></script>
  <script type="text/javascript">
   $(document).ready(function() {
    $("[name=t1]").keyup(function() {
     $.get("index.php?", {"encode": $("[name=t1]").val()}, function(data) {
      $("[name=t1]").val(data);
     });

     $.get("index.php?", {"decode": $("[name=t1]").val()}, function(data) {
      $("[name=t2]").val(data);
     });
    });
   });
  </script>
 </head>

 <body>
  <textarea name="t1"></textarea><br /><hr /><br />
  <textarea name="t2"></textarea><br /><br />
 </body>
</html>

注意:使用的是 JQ 1.4.2。

【讨论】:

  • 很遗憾没有。有一个文本区域位于 div 的顶部。 textarea 具有透明背景,div 文本被隐藏。用户输入:“Hello @someone how are you” textarea 包含“Hello someone how are you?”。 Div 包含“Hello someone 你好吗”。 div 中的任何粗体都有背景颜色,因此看起来它在 textarea 中突出显示。我需要第二个 textarea 来挖洞原始文本(带有@),这样我就可以正确填充底层 div。
  • 抱歉,我没有从这条评论中理解任何内容。你的意思是这个吗(让我们轻松简单地思考):当我在 t1 中输入“hello,[b]moo[\b]”(看看我的答案)时,t2 中发生了什么并不重要(现在)而 t1 文本 ("hello, [b]moo[/b]") 更改为 "hello, moo/"。当上述条件变为“真”时,其他一些元素(假设是 t2)包含“你好,[b]moo[/b]”。我说的对吗?
  • 这很简单。当您在 t1 中键入“hello, [b]moo[/b]”时,t1 将更新为显示“Hello, moo”。然后我需要 t2 包含“你好,[b]moo[/b]”。上述方法的问题是无法进行更多编辑,因为 t1 现在包含“Hello, moo”。任何进一步的编辑都会从 t2 中删除 [b]moo[/b]。
  • 见我上面的答案(我已经完全更新了)。看来,我有你的问题(最后!!!)=)
猜你喜欢
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多