2016-07-22 4 views
1

は:

<input id='text'/> <button id='btn'>Click me</button> 

そして、私のボタンを、テキストボックスにフォーカスを送り、どこかでイベントをクリックします:

$(document).ready(function(){ 

    $('#btn').click(function(event){ 
    console.log('btn '); 
    $('#text').focus(); 
    }); 

    $('#text').keyup(function(event){ 
    console.log('key '); 
    }); 

}); 

...あなたがに入力したキーを使用している場合何らかの形でボタンをクリックすると、フォーカスを受け取っているテキスト要素もEnterキー押しを受け取ります。

https://jsfiddle.net/qup6keLd/

は、Enterキーを押して、ボタンにフォーカスを設定するには、Tabキーを使用します。

は、ここでは、この動作を示すフィドルです。両方のイベントがトリガーされます。スペースを使用してボタンのクリックをトリガーすることはできません。なぜこれが起こっているのですか?(focus()コールを外す以外に)どうしたらいいですか?

+0

が更新フィドルを参照してください。あなたはそれが伝播するのを防ぐためにイベントを消費することができますが、私はどのように覚えていません。 – Carcigenicate

+1

@Carcigenicate 'e.stopPropgation()' – Polyov

+0

ここでは、[Javascriptでのイベント](http://stackoverflow.com/questions/4616694/what-is-event-bubbling-and-capturing)を扱う良い答えです。 – Polyov

答えて

1

keyupイベントの代わりにkeypressイベントを使用します。

jQuery documentation details 2つの違い。私はイベントは、ツリーの下伝播していると思います

$(document).ready(function(){ 
    $('#text').keypress(function(event){ 
    $('#output').append('key '); 
    }); 
    $('#btn').click(function(event){ 
    $('#text').focus(); 
    $('#output').append('btn '); 
    }); 
}); 

Updated Fiddle

+0

ありがとう、それはトリックを行います。私はドキュメントのキーセンテンスは "キープレスイベントハンドラは任意の要素にアタッチすることができますが、イベントは**フォーカスがある要素にのみ**送信される"と思う – user1219358

関連する問題