2015-07-24 3 views
1

У меня есть jquery funtion keydown(), как показано ниже. Как я мог извлечь внутреннюю функцию (e) {} и мог ли другие элементы вызвать ее или объединить ее с другой функцией?Как извлечь анонимную функцию в jQuery

$("tr input[id*='txtNum']").keydown(function(e) { 
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 
     e.preventDefault(); 
    } 
}); 
+0

Можете ли вы объяснить 'другие элементы называют его или комбинировать его с другими function' – Tushar

+0

Вы знаете, что вы не должны писать это как анонимная функция права. Напишите свою функцию, скажем, 'function myKeyUp (e) {...}', затем назовите ее как ваш обработчик клавиатуры: '$ (" tr input [id * = 'txtNum'] "). Keydown (myKeyUp);' – dave

+0

кроме "tr input [id * = 'txtNum']", "tr input [id * = 'txtHours']" должен использовать это. И "tr input [id * = 'txtNum']" имеет некоторую другую специфическую проверку только для себя на keydown не для txtHours –

ответ

0

Если у вас есть возможности редактирования вы всегда можете сохранить эту функцию в переменной

var myFunction = function(e) { 
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 
     e.preventDefault(); 
    } 
} 

Тогда вы можете просто вызвать его в KeyDown() и в другом месте вы хотите использовать его.

$("tr input[id*='txtNum']").keydown(myFunction); 
0

Назначьте свою функцию переменной и передайте ее прослушивающему приложению. Таким образом вы можете повторно использовать и модифицировать его по своему усмотрению.

var keyDownListener = function(e) { 
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode   < 96 || e.keyCode > 105)) { 
     e.preventDefault(); 
    } 
} 

("tr input[id*='txtNum']").keydown(keyDownListener); 
0

ключевое слово: callback function. вы можете использовать предопределенные функции или анонимные функции для обратных вызовов.

целом:

function a(function(){ 
    console.log("hello"); 
} 
a(); // logs "hello" 

другая возможность:

var hello = function(){ 
    console.log("hello"); 
} 
function a(hello); //logss "hello" too 

вы можете прочитать здесь: http://recurial.com/programming/understanding-callback-functions-in-javascript/

ваш случай:

$("tr input[id*='txtNum']").keydown(function(e) { 
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 
    e.preventDefault(); 
} 
}); 

бы сейчас:

var keyDownFunc = function(e) { 
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { 
    e.preventDefault(); 
} 
$("tr input[id*='txtNum']").keydown(keyDownFunc); 
1

Да, есть функция JQuery для такого рода вещи.

Посмотрите на использование .triggerHandler('keydown'). Это возвращает объект обработчика триггера для вашего объекта jQuery. Обработчик триггера имеет на нем свойство handleObj, которое имеет handler, который является анонимной функцией, которую вы назначили.

В вашем случае $("tr input[id*='txtNum']").triggerHandler('keydown').handleObj.handler должен предоставить вам анонимную функцию.

Подробнее на http://www.w3schools.com/jquery/event_triggerhandler.asp

Смежные вопросы