【问题标题】:Javascript Shift+Enter (Firefox)Javascript Shift+Enter (火狐)
【发布时间】:2011-01-05 13:27:43
【问题描述】:

看了一下,发现了一些东西,但似乎没有什么像我想要的那样工作。

最初我的解决方案可以使用 Internet Explorer 和 chrome,但不能使用 firefox(这对我来说是不满意的)

我正在寻找的是一个简单的文本区域,它在输入键上发送数据,但在 Shift+Enter 上创建一个新行。以下是我所拥有的

function goReturn(e,str) {

  var e = (window.Event) ? e.which : e.keyCode;
  if (e.shiftKey && e=="13") {
    document.getElementById("wall").value = 
        document.getElementById("wall").value+"\n";
  } else if(e=="13"){
    // ...continue to send data
  }
}

这会在输入时发送数据,但也会在移位和输入时发送数据(这是我遇到的问题)。

感谢您的帮助

【问题讨论】:

  • 你为什么要把你的数字用引号括起来? e.which 不是字符串!
  • 请不要更改文本区域的默认预期行为。按回车键应始终插入新行。如果有的话,您应该保留大部分默认行为并使用 shift+enter 来提交表单。
  • 你在函数的第一行隐藏了ee.shiftKey 将始终为 false(除非您将该属性添加到 String 原型......)。我假设你的实际代码没有这样做,你能用它更新你的问题吗?

标签: javascript events firefox keycode


【解决方案1】:

在您的表单中捕获提交调用 (onsubmit="...")。在那里,检查最后一个enter 是否与shift 结合使用。如果是,则向提交请求返回 false。

如果在e.shiftKey && e=="13" 上返回false 就足够了,您也可以尝试。

【讨论】:

  • 嗨,textarea 本身并不是来自表单,它是独立存在的。并调用函数onkeyup(和一个onkeydown)
【解决方案2】:

您应该能够通过e.cancel = true; 取消事件传播,但我看到目前您正在覆盖e 变量(事件对象)。如果您将代码更改为以下内容,则应该没问题:

function goReturn(e_obj,str) {

  var e = (window.Event) ? e_obj.which : e_obj.keyCode;
  if (e.shiftKey && e=="13") {
    document.getElementById("wall").value = 
        document.getElementById("wall").value+"\n";
    e_obj.cancel = true;
  } else if(e=="13"){
    // ...continue to send data
  }
}

【讨论】:

    【解决方案3】:

    我已经为我自己的用例编写了一个 jQuery 插件,它可能适合你:http://cburgmer.github.com/jquery-shiftenter/

    插件负责处理返回键,并显示焦点提示以解释行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2011-08-02
      • 2013-10-30
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多