2017-07-05 93 views
1

您好我試圖從關鍵啓用開始,然後一旦單擊按鈕以禁用事件,目前爲止工作正常,然後一旦關閉按鈕被按下,我想再次啓用該事件這部分不起作用我想解決這個使用JavaScript如果可能的話我的關閉按鈕是另一個HTML(project1.html)文件,並通過Ajax這裏被加載是我的代碼:啓用和禁用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。因爲沒有默認的事件處理程序,所以'enable_keydown'將會是'null' –

回答

1

要刪除事件偵聽器的功能不能是匿名的,這樣可以在以後引用它。所以定義功能:

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

將它添加到事件偵聽器:

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

,並刪除它:

$("#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

感謝tho這打破了事件沒有任何動作 –

+0

@Neths事件將只在點擊'$(「。open-project」)'按鈕後添加,因爲我的理解是你的意圖。看看小提琴的例子:https://jsfiddle.net/hxk18jce/1/ – John

+0

我完全忘了我正在通過Ajax加載另一個html文件中的關閉按鈕,這可能是問題 –

1

要做到這一點,我想你禁用處理程序改成這樣:

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

而對於重新啓用的處理程序做到這一點:

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

on()函數將keydown事件綁定到basica lly停止事件的發生,並且off()函數恢復默認的keydown功能。您可以參考jQuery的文檔在這裏的功能:

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

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

1

點擊關閉div並指定keydown函數點擊打開從document.onkeydown刪除keydown函數。

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文件加載的,所以這可能是問題 –