2012-02-23 3 views
0

Я хотел бы узнать, как лучше написать более общий метод, который можно назвать onload и onclick. Это то, что я до сих пор прекрасно работает.jQuery метод обмена между onclick и onload

rushJustification($("#rush")); 

$("input#rush").click(function() { 
    rushJustification($(this)); 
}); 

function rushJustification(obj) { 
    var rushInput = obj.is(':checked'); 
    var rushContainer = $("#rush-justification-container"); 

    if(rushInput) { 
     rushContainer.slideDown(300); 
    } else { 
     rushContainer.hide(); 
    } 
} 

ответ

4

Вместо того, чтобы копировать содержимое click обработчика, вызвать его, а также:

$("input#rush").click(function() { 
    rushJustification($(this)); 
}).click(); 

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

rushJustification($("input#rush").click(function() { 
    rushJustification($(this)); 
})); 

Сначала это может показаться странным. Эта возможность возможна из-за цепочки jQuery. Метод click возвращает ту же коллекцию jQuery, а именно $('input#rush'). Затем это передается как аргумент функции rushJustification.

+0

Этот подход, кажется, имеет некоторые неожиданные последствия при использовании его с помощью ui-checkbox. Когда флажок был сохранен: отмечен, флажок перезагрузки страницы не установлен, а отображаемый блок rushContainer. –

+0

@George Я не уверен, о чем вы говорите. У вас есть несколько событий 'click', связанных с' # rush'? –

+0

Я вижу, что происходит, у меня есть флажок на моей странице, который заполнен бэкэндом. Если true, мне нужно отобразить текстовое поле. Ваш код запускает обработчик событий каждый раз, когда загружается страница, которая меняет флажок, а не просто вызывает метод rushJustification без щелчка. Это самый чистый, я смог получить код rushJustification(); $ («ввод # спешка»). Click (rushJustification); –

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