2016-03-27 10 views
0

フォームを含むjquery UIモーダルボックスがあります。jquery uiモーダルボックス内のフォームが隠された後、Keypressがもう呼び出されない

Enterキーが押されたことを処理するkeypressイベントが宣言されました。 モーダルボックスに含まれるフォームを非表示にすると、keypressイベントはもはや呼び出されません。

この動作は、ここに再現されていますhttps://jsfiddle.net/patrick29/jqp4wp77/

$('.dialog').on('keypress', function(e) { 
    if (e.keyCode == $.ui.keyCode.ENTER) { 
     submit(); 
    } 
}); 
function submit() { 
    alert('ok'); 
    $('.dialog form').hide(); 
} 

初めて入力しますが、私はOKメッセージを受け取る押されます。その後、フォームが隠され、2回目のEnterが押されました。私はもうokメッセージを受信しません。

私はフォームを非表示にしても、キー入力イベントの作業を行う理由とその理由を知っていますか?

ありがとうございます!

+0

それは隠されたなら、あなたはその中のキーを押すことができるように、どのようにそれがフォーカスを持つことができますか? –

+0

okボタンは非表示ではないモーダルボックスの1つで、フォームを隠すとモーダルボックスのキー入力イベント管理が変更されないことが予想されます – user2708647

答えて

0

これは、.hide()の代わりに次のようにすることができます。

$('.dialog form').css({ 
    opacity: 0 
}); 

https://jsfiddle.net/nr5fptd2/1/

+0

動作しますが、フォームに占有されていたスペースが消えるようにしたいのですが、不透明度を0に設定する場合はそうではない – user2708647

+0

function submitアラート( 'ok'); $( '。dialog')。css({ \t minHeight: '0px'、 高さ:0, 不透明度:0 }); } –

+0

クリーンな解決策が見つからなかったので、私はあなたの '関数submit(){alert( 'ok')からインスピレーションを得た回避策を使用しました。 $( 'dialog')。css({'position': '絶対'、 '左': ' - 500px'}); } 'ありがとう – user2708647

0

コンテナにキー押しハンドラを持たせるには、入力のようなキーボードのやりとりをサポートする要素を内部に持つ必要があります。 .dialog div内の要素は、フォームを非表示にするとサポートしません。詳細はこちらhttp://www.456bereastreet.com/archive/201302/making_elements_keyboard_focusable_and_clickable/

たとえば、送信機能に$('.dialog').append('<input/>');を追加すると、イベントが機能します。もちろん、私はそれをお勧めしません。

+0

$( '。dialog')を追加しようとしました。 ;私のサブミット関数では、結果は同じです(フォームが削除された後、キー押下イベントは処理されません) – user2708647

関連する問題