【问题标题】:How to submit <textarea> value using javascript?如何使用 javascript 提交 <textarea> 值?
【发布时间】:2019-09-08 03:17:32
【问题描述】:

我有一个供个人使用的 chrome 扩展程序来更改我访问的某些网站。一个站点有一个&lt;textarea&gt;,您可以输入它。没有提交按钮。您必须按 Enter 键才能提交您输入的内容。任何地方也没有表单标签。

<div id="chatRoot">
    <div data-reactroot="" class="chat-box-wrap_20_R_" style="min-width: 1180px;">
        <div class="chat-box_Wjbn9 faction_2T9gm chat-active_1Sufk">
            <div class="chat-box-input_1SBQR ">
                <div>
                    <textarea name="chatbox" maxlength="840" class="chat-box-textarea_2V28W">
                    </textarea>
                </div>
            </div>
         </div>
     <!-- react-empty: 216 -->
     </div>
</div>

我尝试创建一个键盘事件并使用输入键代码进行调度,虽然我相信它有效,但它被拒绝为“不受信任的按键”。

如何使用 vanilla javascript 向没有表单标签、没有提交按钮、只接受 ENTER 按钮作为有效提交形式的textarea 提交数据?

*我不想按回车键。我希望我的 chrome 扩展程序自动将数据输入到textarea(我没有问题),然后让我的 chrome 扩展程序自动提交它输入的数据(这是我的问题所在)。

谢谢。

【问题讨论】:

  • 但“Enter”键是与&lt;textarea&gt; 元素交互的一部分。该元素允许嵌入换行符的多行内容。
  • 嗨,尖尖的。在这个
  • 可能 这里是解决方案:stackoverflow.com/a/49389811/11857699
  • @Vedat --- 谢谢,我确实看到了。鉴于我在上面提供的 html,您的链接中的建议将如何处理这部分:event.target.form.dispatchEvent 特别是 form 部分。鉴于提供的 html,我看不出这意味着什么……在此先感谢。
  • @Vedat ---fyi,我已经尝试过,因为代码显示较少的变量名称更改。还尝试了event.target.dispatchEvent --- 既没有工作,也没有在 chrome devtools 或我的扩展选项卡中产生错误。不知道如何更改该部分以使其应用/解决这种情况。

标签: javascript textarea submit


【解决方案1】:

以下应该有效。您只需对当前代码进行 1 处修改:您必须在文本区域中添加一个 id。如果您复制包含的代码,则可以执行此操作。

这确实解决了另一个问题。如果按回车键,它会开始一个新行。这行不通。如果你只是按回车,它将提交消息。有了这个,如果你按 shift+enter,那么它将开始一个新行。如果你只是按回车,那么它会提交它!这意味着您可以提交多行消息并使用回车键提交消息。

代码中发生的所有事情的详细演练都包含在 cmets 的形式中。

// get the chatbox and set the default value for if the shift key and enter key was pressed
var chatbox = document.getElementById("chatbox_main"), shiftPressed = false, enterPressed = false;
// listen for the user to press a key
chatbox.addEventListener("keydown", function(e) {
  // check if the shift key was pressed and say if it was
  if (e.shiftKey) shiftPressed = true;
  // check if the enter key was pressed
  if (e.keyCode == 13) {
    // prevent the enter key from putting in a new line. If shift it pressed, it will be manually added later
    e.preventDefault();
    // say that the enter key was pressed
    enterPressed = true;
  }
});
// listen for the user to let go of a key
chatbox.addEventListener("keyup", function(e) {
  // check if the shift key or enter key was released
  if (e.shiftKey || e.keyCode == 13) {
    // check if the enter key was pressed, and if it wasn't, then reset the shift pressed value because it was only shift that was pressed
    if (!enterPressed) shiftPressed = false;
    // enter was pressed, so move on
    else {
      // make sure that shift wasn't pressed along with enter
      if (!shiftPressed) {
        // get the input from the chatbox and define if the chatbox should be cleared
        var input = chatbox.value;

        // prevent the enter key from being typed into the chatbox
        e.preventDefault();

        // run you custom code here!
        alert("You submitted this:\n" + input);

        // clear the chatbox
        chatbox.value = "";

        // reset the value
        enterPressed = false;
      // shift and enter was pressed, so move on
      } else {
        // shift + enter was pressed, so put in a new line
        chatbox.value += "\n";
        // reset the values and let the enter key get pressed
        enterPressed = false, shiftPressed = false;
      }
    }
  }
});
&lt;textarea name="chatbox" maxlength="840" class="chat-box-textarea_2V28W" id="chatbox_main"&gt;&lt;/textarea&gt;

【讨论】:

  • 嗨@VirxEX,感谢您花时间将其作为答案。我阅读您的代码的方式,看起来我需要实际按 Enter 键对吗? - 我正在尝试找出如何仅使用 vanilla javascript 将数据提交到 textarea,而不是通过要求我按回车来......(我认为我的 OP 对此很清楚,但是,我将进一步编辑以确保就是这样)。
  • 您说“您必须按 Enter 键才能提交您输入的内容”
  • 正确,用户提交数据的唯一方法是按下回车键。如果有提交按钮,那么我只需调用提交按钮,这不会是一个问题。但是没有表单标签,没有提交按钮,提交数据的唯一方法是通过按 ENTER 按钮,我不知道如何让我的 javascript 代码代表我自动提交数据。我希望这能与我的 OP 编辑​​一起解决问题。
  • 哦!知道了。误会请见谅!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2020-07-05
  • 2021-11-30
相关资源
最近更新 更多