【问题标题】:Submit textarea form without a submit button with Enter key press使用 Enter 键提交没有提交按钮的 textarea 表单
【发布时间】:2012-11-15 16:24:51
【问题描述】:

背景: 我正在制作一个类似 facebook 墙的页面,该页面将包含许多帖子,您应该能够评论每个帖子。所以在这一页中有很多形式(当然)。我只需要提交其中一个。

所以是的,我已经找到了这个问题的答案,但它们都不起作用,所以在这里提问:

我得到了这样的表格:

    <form enctype="text/plain" action="submitcomment.php" method="post" target="output_frame" id="comment<?php echo $prepare_data['post_id']; ?>">
    <textarea name="comment" id="comment" onkeypress="return submitViaEnter(event)" value="" autocomplete="off"></textarea>
    <input type="hidden" name="hiddenid" id="hiddenid" value="<?php echo $prepare_data['post_id']; ?>" />
    </form>

我的 JavaScript 函数如下所示:

function submitViaEnter(evt) {
    evt = (evt) ? evt : event;
    var target = (evt.target) ? evt.target : evt.srcElement;
    var form = target.form;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
    if (charCode == 13) {
        document.forms[this.form.id].submit();
        alert("sent!");
        return false;
    }
    return true;
}

如果我使用文本框,它可以工作,但是当我使用 textarea 时,它就不能工作。尝试按 enter 没有任何作用。

【问题讨论】:

  • fiddle 中工作正常。你不应该使用charCode 属性,请参阅this question
  • 也许“document.forms[this.form.id].submit();”有问题-部分?因为它至少对我不起作用:/
  • 你可以用target.form.submit()替换所有这些,顺便说一句
  • 您应该接受其中一个答案。如果他们都没有帮助,请发布您自己的答案以及您所做的修复并接受您自己的答案。
  • 您的评论修复了它,我该如何应用它作为答案? :P 我也不能在 8 小时内发布我自己的答案,因为我没有足够的声誉!

标签: php javascript forms submit enter


【解决方案1】:

使用 jQuery 并通过 javascript 将函数绑定到事件:

$(function(){
    $('form > textarea').on('keyup', function(e){
        if (e.keyCode == 13) {
            // do whatever you want to do, for example submit form
            $(this).parent('form').trigger('submit');
        }
    });
});

但请注意这一点 - 它会在每个新行上提交。人们倾向于在 textareas 中编写多行文本,因此这种行为可能是意料之外的

【讨论】:

  • 这听起来不错。但是每个表单 ID 都是不同的。如何让 jQuery 知道要提交哪一个?我是 JavaScript/AJAX/jQuery 的新手......到目前为止,我已经用 PHP 完成了所有工作:)
  • 无论如何,您都必须使用唯一的 ID 标记您的表单/文本区域,并且您可以通过从 PHP 中回显某些内容来完成此操作,就像您为表单的 ID 所做的那样。我修改了上面的代码,使其不绑定到 textareas ID,而是绑定到通用标记。更好的是为所有文本区域分配某个类并将其用作选择器而不是“表单 > 文本区域”,以避免与您不想增强的其他表单重叠
【解决方案2】:

此代码流在jsfiddle test 中运行良好。请注意,您不应该使用e.charCode,因为e.keyCode (IE) 和e.which(其他所有内容)就足够了。见this question

另外,您查找表单的代码过于复杂且没有必要,请更改此代码:

var form = target.form;
...
document.forms[this.form.id].submit();

到这里:

target.form.submit();

【讨论】:

【解决方案3】:

像以前一样将文本区域嵌套在表单中,但要给它们类名而不是 id。这样,jquery 就可以使用特定的类名引用 DOM 中的所有文本区域。

<form name="form1" enctype="text/plain" action="submitcomment1.php" method="post" target="output_frame">
<textarea name="comment1" class="comment" value="" autocomplete="off"></textarea>
</form>
<form name="form2" enctype="text/plain" action="submitcomment2.php" method="post" target="output_frame">
<textarea name="comment2" class="comment" value="" autocomplete="off"></textarea>
</form>

然后,像这样调整 Jura 的代码,它应该引用文本字段所在的正确格式。

$(function(){

  $('.comment').on('keyup', function(e){

    if (e.keyCode == 13) {

      $(this).parent('form').trigger('submit');

    }
  });
});

【讨论】:

  • 哎呀,在重写之前没有注意到你对我的代码的更新,不过完全赞同你的修改。 +1
猜你喜欢
  • 2012-02-17
  • 2011-04-02
  • 2018-01-19
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
相关资源
最近更新 更多