2017-11-29 2 views
0

私はHTMLフォームを持っています。 JavaScriptを使用して、私がしたい:同じキーをリスンする複数のオブジェクト

  1. ラインを有効にしますがに壊れ、私はときに私私のファイルを送信してからスクリプトを防ぎたいという意味(あなたがクリックどんなにを入力しのデフォルトのイベントを無効に
  2. を入力します。 を入力してください)

一般的に私はこれを行う方法を知っています。以下はそれぞれのJavaScriptコードです。私はそれらをテストし、彼らは自分で完全に正常に動作します。 (注:私は変数に保存されているいくつかのtextboxinput要素がある。)

textbox.addEventListener("keypress", function(e) { 
    var key = e.which; 
    if (key == 13) { 
     event.preventDefault(); 
     for(i=0; i<textbox.length; i++) { 
      textbox[i].value = textbox[i].value + "\n"; 
      return false; 
     }; 

    } 
}); 


input.addEventListener("keypress", function(e) { 
    var key = e.which; 
    if(key=13) { 
     event.preventDefault(); 
     return false; 
    } 
}); 

私もテキストボックスのための私の関数から

event.preventDefault(); 

を削除し、代わりに

document.addEventListener("keypress", function(e) { 
    var key = e.which; 
    if (key == 13) { 
     event.preventDefault(); 

    } 
}); 
を使用してみました

しかし、明らかにそれもうまくいきませんでした。他の質問では、私はあなたが同じキーのために複数のオブジェクトを持つことができないことを読んだが、私はそれがここに当てはまるかどうか分からないのですか?

function disableEnter(e) { 
    var key = e.which; 

    if(key == 13) { 
     event.preventDefault(); 
    } 
} 

はしかし、再び、それは動作しませんでした:

私が試したもう一つは、このように見えた入力と体がロードされたときに関数を呼び出すための機能を、削除することでした。

1つのキーに2つの機能を接続することはできませんか?もしそうなら、私はこれを回避し、まだページのデフォルトを防ぐ方法はありますか?

編集:私は、私はそれぞれtextboxinputと呼ばれる配列に保存された私の形で、いくつかのtextareainputの要素を持っている:私はちょうどそれが完全には明らかではないかもしれないことに気づきました。

答えて

0

これは簡単な方法です。私はちょうどに持っていた、完璧に働いていたこと、どうもありがとうございました

// set up the node lists 
 
var input = document.getElementsByTagName('input'); 
 
var textbox = document.getElementsByTagName('textarea'); 
 

 
// loop through the input elements & add the listener to each 
 
for (var i = 0; i < input.length; i++) { 
 
    addListener(input[i]); 
 
} 
 

 
// loop through the textarea elements & add the listener to each 
 
for (var j = 0; j < textbox.length; j++) { 
 
    addListener(textbox[j]); 
 
} 
 

 
// function to assign the listener 
 
function addListener(el) { 
 
    el.addEventListener("keypress", function(e) { 
 
    if (e.which == 13) { // if ENTER was pressed 
 
     event.preventDefault(); 
 
     if (e.target.tagName.toUpperCase() == "TEXTAREA") { // if a textarea 
 
     e.target.value = e.target.value + "\n"; 
 
     return false; 
 
     } 
 
    } 
 
    }); 
 
}
<form> 
 
    <input placeholder="Input 1"><br /><br /> 
 
    <input placeholder="Input 2"><br /><br /> 
 
    <textarea placeholder="Textbox 1" rows=5></textarea> 
 
</form>

+1

:私はあなたのHTMLがどのように見えるかわからないんだけど、これはinputtextareaを使用して、簡単なフォームでの例ですウィンドウがロードされるたびに呼び出される関数でforループをラップする " –

関連する問題