Еще лучше использовать обработчик jQuery? - PullRequest
4 голосов
/ 20 августа 2011

Я имею в виду, если у меня есть этот обработчик:

$(document).ready(function() {
    $('.myElement').change(function() {
        // some
    });             
});

, связанный, например, с элементами "400", он будет медленнее, чем

function myFunct() {
    // some
{

<select class="myElement'" onchange="myFunct(this);return false">
    // one of 400 elements. Each of this use that onchange link
</select>

, потому что на самом деле мне нужновызывайте эту функцию только тогда, когда я «меняю» что-то (поэтому я не понимаю, почему мне нужно обрабатывать 400 элементов, худший из ресурсов).

О чем вы думаете?

Ответы [ 3 ]

7 голосов
/ 20 августа 2011

Да, это будет медленнее, поскольку браузер должен прикрепить обработчик всех этих элементов, что может вызвать «задержку» загрузки страницы, во время которой ваш пользователь может взаимодействовать с элементами, к которым не прикреплен код обработчика.

Вы все еще можете использовать jQuery эффективным способом, однако, используя только один обработчик делегированный .

$('#container').delegate(".myElement", "change", function () {
    myFuct(this);
    return false;
}); 

Обновление!Пример jQuery 1.7 (с использованием .on):

$('#container').on("change", ".myElement", function () {
    myFuct(this);
    return false;
}); 
2 голосов
/ 20 августа 2011

Вот, пожалуйста:

$(function() {

    function myFunct() { ... }

    $('.myElement').change( myFunct ); 

});

Хитрость заключается в том, чтобы определить один объект функции, а затем использовать эту функцию в качестве обработчика изменений для всех ваших элементов.

1 голос
/ 20 августа 2011

Я думаю, что второе лучше в этом случае. Вы также можете использовать jQuery внутри вашей функции

http://jsperf.com/testaaa

звонок jQuery: 67,194 / сек

ваши вызовы функций: 114,142,715 / сек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...