2011-01-05 45 views
2

看了看,发现了一些关于此的东西,但没有看起来像我喜欢它的工作。Javascript Shift + Enter(Firefox)

起初我有我的解决方案使用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 
    } 
} 

这将上输入数据,也将轮班数据,然后输入(这是我有问题)。

感谢您的任何援助

+0

你为什么用引号括起你的号码? '这不是一个字符串! – jwueller 2011-01-05 13:38:41

+0

请不要更改文本区域的默认行为。按返回应始终插入一个新行。如果有的话,你应该保持大部分默认行为不变,并使用shift + enter来提交表单。 – meagar 2011-01-05 15:58:41

+0

你在功能的第一行中隐藏了'e'。 'e.shiftKey'将始终为假(除非您将该属性添加到字符串原型...)。我假设你的实际代码没有这样做,你能用它更新你的问题吗? – Gijs 2011-06-04 14:26:27

回答

1

渔获表单提交调用(的onsubmit = “...”)。在那里,检查最后的enter是否与shift组合。如果是,则返回false到提交请求。

你也可以尝试,如果返回falsee.shiftKey && e=="13"就足够了。

+0

嗨文本区本身不是来自一个窗体,它是坐在它自己的。并调用函数onkeyup(和一个onkeydown) – 2011-01-05 14:23:39

1

您应该能够通过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 
    } 
} 
相关问题