2011-01-05 62 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 
    } 
} 
相關問題