위쪽/아래쪽 화살표를 사용하여 행을 선택할 수있는 테이블이 있습니다. 행을 선택하면이 값이 ajax를 통해 레코드를 가져옵니다.keydown 이벤트 리스너에서 debounce 함수 추출
사용자가 스팸성 아약스 요청을 멈추게하려면 지시문에서 호출하는 디버깅 기능이 있습니다. 이것은 keydown 이벤트를 통해 트리거됩니다. 이 모든 것이 작동하지만 필요한 방식은 아닙니다. 나는 debounce 함수가 호출되기 전에 preventDefault를 호출하기를 원합니다. 따라서 사용자는 지연없이 행을 위/아래로 이동할 수 있으며 지연 후에도 AJAX는 계속 실행됩니다.
나는 이것을 허용하기 위해 내 코드를 추출해야한다고 생각하지만 몇 가지 시도를 한 후에는 작동시키지 못한다. 컨트롤러에서
$('table').keydown(scope.debounce(function (e) {
if(e.keyCode == 38) { // Up arrow
// Do Ajax stuff
e.preventDefault();
e.stopPropagation();
}
if(e.keyCode == 40) { // Down arrow
// Do Ajax stuff
e.preventDefault();
e.stopPropagation();
}
}, 250));
:
이 지침에서이 원래 버전
$scope.debounce = function (fn, delay) {
var timer = null;
return function() {
var context = this, args = arguments;
clearTimeout(timer);
timer = setTimeout(function() {
fn.apply(context, args);
}, delay);
};
};
나는를 keyDown에 호출되는 함수를 추출 시도했지만 지금은 단지 지연을 무시하는 것 . 작동 방법에 대해 머리를 터지 리지 못합니다. 컨트롤러에서
: 때마다를 keyDown을 누를 때처럼이 someFunction
가 호출 보이는
$('table').keydown(someFunction);
function someFunction(e) {
e.preventDefault();
e.stopPropagation();
var blahblah = scope.debounce(function (e) {
if(e.keyCode == 38) { // Up arrow
// Do Ajax stuff
}
if(e.keyCode == 40) { // Down arrow
// Do Ajax stuff
}
}, 250);
blahblah();
}
대신 var timer = null을 사용할 수 있습니다. var timer = setTimeout (function() { fn.apply (context, args); }, 지연); }; –
말의 뜻을 완전히 이해하지 못했지만 말한대로 코드를 대체 했으므로 작동하지 않습니다. – spengos