2017-07-05 15 views
1

こんにちは私はキーを有効にして開始しようとしていますし、一度ボタンをクリックしてイベントを無効にするとこれまでのところうまくいきました。そして一旦閉じるボタンが押されたらもう一度イベントを有効にしたい私のコードの可能私の閉じるボタンは、別のHTML(project1.html)ファイルであるとAjaxここ経由でロードされている場合、私は、この使用してJavaScriptを解決したいのです:onkeydownイベントを有効または無効にしますか?

var enable_keydown = document.onkeydown; 

$(".open-project").click(function(){ 
document.onkeydown = null; 
}); 

$("#project_close").click(function(){ 
document.onkeydown = enable_keydown; 
}); 


document.onkeydown = function(e) { 
    switch (e.keyCode) { 
     case 37: 
      $.fn.fullpage.moveSectionUp(); 
      break; 
     case 38: 
      $.fn.fullpage.moveSectionUp(); 
      break; 
     case 39: 
      $.fn.fullpage.moveSectionDown(); 
      break; 
     case 40: 
      $.fn.fullpage.moveSectionDown(); 
      break; 
    } 
}; 

種類よろしく

+0

あなたはそれが完了する前に、それを複数回クリックされるのを防ぐためにしようとしていますか?その場合は、代わりにボタンを無効にし、完了時に再度有効にします。 – mkaatman

+0

.project_closeまたは#project_close – JSmith

+0

先頭に 'enable_keydown'を' document.onkeydown'に設定しましたが、 'document。終了時まで 'onkeydown'が終了するので、 'enable_keydown'は' null'になります –

答えて

1

あなたが後でそれを参照できるように、あなたの関数が匿名にはできませんイベントリスナーを削除するには。だからあなたの関数を定義する:

$(".open-project").click(function(){ 
    document.addEventListener('keydown', moveSection); 
}); 

をして、それを削除します:

function moveSection(e) { 
    switch (e.keyCode) { 
     case 37: 
     case 38: 
      $.fn.fullpage.moveSectionUp(); 
      break; 
     case 39: 
     case 40: 
      $.fn.fullpage.moveSectionDown(); 
      break; 
     default: 
      break; 
    } 
} 

は、イベントリスナーにそれを追加

$("#project_close").click(function(){ 
    document.removeEventListener('keydown', moveSection); 
}); 

は、あなたがここに

をやっている https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListenerhttps://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener

を参照してください。

var enable_keydown = document.onkeydown; 

$("#project_close").click(function(){ 
    document.onkeydown = enable_keydown; 
}); 

document.onkeydown = document.onkeydownになりますが意味がありません。

+0

ありがとうございましたこれはこれ以上何も動かないイベントを破ります –

+0

@Nethsイベントはあなたの意図であると私が理解した通り '$("。open-project ")'ボタンをクリックした後で追加されます。例えば、次のようなフィディルドをチェックしてください:https://jsfiddle.net/hxk18jce/1/ – John

+0

Ajax経由で別のhtmlファイルに閉じるボタンをロードしているのを忘れてしまいました。これはおそらく問題です –

0

ますフラグ変数を使用するか、バインドおよびバインド解除関数を使用できます。

また、この質問チェックアウト:これを行うには

bind and unbind event in jquery

1

を、私はこれまで、あなたの無効化ハンドラを変更します

$(".open-project").click(function(){ 
    $(document).on('keydown', function(e) { e.preventDefault(); }); 
}); 

と再有効化ハンドラのためこの操作を行います

$("#project_close").click(function(){ 
    $(document).off('keydown'); 
}); 

on()関数は、keydownイベントをbasicaにバインドしますイベントの発生を停止し、off()関数はデフォルトのkeydown機能を復元します。あなたはここにそれらの機能のためのjQueryのドキュメントを参照してくださいすることができます

http://api.jquery.com/on/

http://api.jquery.com/off/

1

close divをクリックしてkeydown機能を割り当てるopenをクリックすると、keydown関数がdocument.onkeydownから削除されます。

function moveFunc(e) { 
 
      alert(e.keyCode); 
 
    }; 
 

 
$(".open-project").click(function(){ 
 
    document.onkeydown = null; 
 
}); 
 

 
$("#project_close").click(function(){ 
 
    document.onkeydown = moveFunc; 
 
});
.open-project{ 
 
    background-color: red; 
 
    width: 150px; 
 
    height: 150px; 
 
    } 
 
    
 
#project_close{ 
 
    background-color: green; 
 
    width: 150px; 
 
    height: 150px; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="open-project" >open project</div> 
 
<div id="project_close" >project close</div>

+0

有効にするまでは同じ効果があるようです。だからそれを有効にしてから無効にしますが、もう一度有効にする必要があるときには失敗します –

+0

スニペットを投稿できますか? – JSmith

+0

私は閉じるボタンがAjaxの別のhtmlファイルを介してロードされていることを完全に忘れてしまったので、これはおそらく問題です –

関連する問題