2012-06-10 4 views
8

Я вижу много людей, проверьте, чтобы увидеть, если DOM элемент существует, прежде чем присваивать событие, например (CoffeeScript):Должен ли мы проверить, существует ли элемент перед назначением событий?

$ -> 
    if($("#progressbar").length > 0) 
     $("#progressbar").progressbar(value: 0) 

ли это необходимо? Если мы просто добавим событие в любом случае, существует ли элемент или нет, есть ли производительность?

+2

Это JQuery? –

+0

Я бы подумал, что сначала вы получите ошибку, нет? – thescientist

+0

Он конвертирован из Coffeescript в прямой javascript. Я предполагаю, что ошибка не появляется, потому что это событие загружается без взаимодействия с пользователем (см. Ответ gabrielhilal ниже). –

ответ

12

Каждый вызов метода в jQuery завернут в функцию .each, поэтому проверка того, существует ли элемент, обычно не требуется - не будет итераций вызываемой функции, если набор пуст, он терпит неудачу. Приведенный пример является хорошим примером того, что при прямом вызове нет никакого вреда или штрафа за производительность.

Когда вы сделать хотите сделать это, вероятно, потому, что вы манипулирование DOM или делать некоторые дорогостоящую операцию в зависимости от наличия элемента, убедитесь, что вы кэшировать вызов, особенно если это сложный селектор:

specialThings = $('section .special') 

if specialThings.length > 0 
    doStuffWith specialThings 

или в качестве альтернативы, воспользовавшись безопасности вар CoffeeScript в:

if (specialThings = $ 'section .special').length 
    doStuffWith specialThings 
+0

Это имеет смысл, спасибо! –

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