RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:00-18:00
你可能遇到了下面的问题
关闭右侧工具栏
使用Ctrl+Enter提交表单
  • 作者:admin
  • 发表时间:2013-07-02 14:16:55
  • 来源:未知

我们发表微博或论坛发帖时,在内容输入框中输入完内容后,可以点击“提交”按钮来发表内容。可是,如果你够“懒”,你可以不用动鼠标,只需按住键盘上的Ctrl+Enter键,即可提交表单,完成内容发布。

当然,由于输入框是一个多行文本输入框textarea,我们知道,在textarea中按Enter(回车)键可以换行,并不能直接提交表单(submit),而默认情况下,浏览器忽略了Ctrl键。那么我们可以通过Javascript脚本来控制使用Ctrl+Enter键来组合完成表单提交,本文结合示例讲解基于jQuery的Ctrl+Enter提交表单效果。

查看演示DEMO 下载源码

HTML

我们在页面body中,放置一个textarea输入框,一个提交按钮button,以及展示提交后的结果div#result。

提 交可按“Ctrl+Enter”键提交

CSS

简单的写几行css,修饰textarea输入框、button提交按钮以及提交后显示内容的.post样式。

textarea {display:block; width:450px;height:100px;border: 1px solid #ccc;}
button {border: 1px solid #ccc; background: #ececec;-webkit-border-radius: 3px;
-moz-border-radius: 3px;margin-top: 10px;padding: 5px 20px; cursor:pointer}
.post{width: 230px;border: 1px solid #ccc;background: #ececec; padding: 10px; margin: 10px 0;}

jQuery

首先必须预先载入jQuery库。


我们来编写一个简单的插件ctrlEnter(),其中带两个参数,第一个参数btns表示插件作用的元素,第二个参数fn表示调用的函数。我们在插件中加入函数performAction()来确保插件内部调用。接着插件开始侦听键盘事件,当按下keydown键盘中的某个键时,判断如果按下的是Enter(回车)键和Ctrl键,则调用performAction(),并阻止默认的回车换行行为。然后我们还应该在button上绑定click事件调用performAction(),这样就可以通过单击按钮也可以提交内容了。

$.fn.ctrlEnter = function (btns, fn) {
     var thiz = $(this);
     btns = $(btns);
        
     function performAction (e) {
         fn.call(thiz, e);
     };
     thiz.bind("keydown", function (e) {
        if (e.keyCode === 13 && e.ctrlKey) {
            performAction(e);
            e.preventDefault(); //阻止默认回车换行
        }
     });
     btns.bind("click", performAction);
}

最后,调用ctrlEnter,将textarea中的内容提交到#result中,并且将回车替换为br,并且清空textarea。当然实际应用中,应该将内容post给后台处理程序,让后台程序(php等)处理内容及数据交互。

$("#msg").ctrlEnter("button", function () {
       $("").append(this.val().replace(/\n/g, "
")).fadeIn('slow')
.appendTo("#result");
       this.val("");
});

好了,你现在可以到demo中测试下效果了。

有同学说可以通过在表单form上直接绑定onkeydown来侦听鼠标事件,只需要一句代码如下:


执行以上代码后,可以通过按住Ctrl+Enter键实现提交表单,但貌似这种上述代码浏览器兼容性差,你还需要写一大段代码来解决浏览器的兼容性,所以直接使用jQuery版的吧。