2015-12-08 2 views
0

На моем сайте много динамического контента на DOM. Как я могу делегировать функцию numeric()?Функция делегата и числовая() функция Javascript

Я знаю, что я должен сделать что-то вроде этого:

$(document.body).on('.js-numeric', 'keydown' (change etc.) function() {}); 

Но я не знаю, как вставить функцию numeric(). Если я хочу использовать цифровую функцию для статического контента он отлично работает, как это:

$(".js-numeric").numeric(); 

ответ

1

Если элементы находятся в body тега вы можете сделать это:

$(document.body).on('keydown', '.js-numeric', function() {}) 

Вы поменялись местами аргументы вокруг , если вы read the docs вы можете увидеть, что:

.На (события [, селектор] [, данные], обработчик)

принимает eventsдоselector вместо другого, как вы это делали в данный момент.

Если вы читаете мой фрагмент кода выше его читает более логичным, чем код Вы написали (не то, что я пишу чистый код, но только то, что разработчики JQuery думать об этих вещах :))

Это будет делегировать событие keydown от document.body к любому динамически добавленному элементу .js-numeric.

Если вы хотите вызвать .numeric() на элемент, который был keydown-е изд, то можно было бы написать так:

$(document.body).on('keydown', '.js-numeric', function() { 
    // $(this) is the element that triggered the event 
    $(this).numeric(); 
}) 
1

вы имели синтаксису неправильно

$(document).on('keydown', '.js-numeric', function(e) { 
 
    stackLog(e.which); 
 
    $(this).numeric(); 
 
}); 
 

 
function stackLog(log){ 
 
    var _console = document.querySelector('#console'); 
 
    _console.innerHTML = log + '\n' + _console.innerHTML; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="js-numeric"></textarea> 
 
<pre id="console"></pre>

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