#jquery #jquery-ui
#jquery #jquery-пользовательский интерфейс
Вопрос:
Допустим, у меня есть div с двумя привязками:
<div id="#dialog">
<a href="#" class="ok">Delete</a>
<a href="#" class="cancel">Cancel</a>
</div>
Чтобы заставить <a>
якоря работать, я использую следующие два вызова:
$('#dialog a.ok').click(function() {
$.ajax({ ... });
$(this).closest('#dialog').dialog('close');
});
$('#dialog a.cancel').click(function() {
$(this).closest('#dialog').dialog('close');
});
Я хотел бы иметь возможность объединить его с чем-то вроде этого:
$('#dialog').execute(function() {
var dialog = $(this);
dialog.find('a.ok').click(function() {
$.ajax({ ... });
dialog.dialog('close');
});
dialog.find('a.cancel').click(function() {
dialog.dialog('close');
});
});
Поддельная exeucte()
функция немедленно выполнит анонимную функцию, не привязывая ее к событию DOM. Я хотел бы использовать этот шаблон для того, чтобы сгруппировать связанные функции вместе (в этом случае в диалоговом окне есть две кнопки, которые очень тесно связаны друг с другом).
Мой вопрос двоякий:
- Какой фактический вызов jQuery я должен использовать здесь?
- Это лучший способ группировки связанных функций вместе?
Комментарии:
1. Хороший вопрос! Я не знаю, лучший ли это способ, но
.each(function(){ ... })
должен сработать.
Ответ №1:
Для этого вам не нужны никакие специальные материалы jQuery, просто напишите функцию и передайте ее $('#dialog')
в качестве аргумента:
function do_stuff(dialog) {
dialog.find('a.ok').click(function() {
$.ajax({ ... });
dialog.dialog('close');
});
dialog.find('a.cancel').click(function() {
dialog.dialog('close');
});
}
do_stuff($('#dialog'));
Или, если вам действительно нравятся анонимные функции, вы могли бы использовать each
:
$('#dialog').each(function() {
var dialog = $(this);
dialog.find('a.ok').click(function() {
$.ajax({ ... });
dialog.dialog('close');
});
dialog.find('a.cancel').click(function() {
dialog.dialog('close');
});
});
но использование each
с селектором, который может соответствовать только одному элементу, выглядит забавно. Вы также могли бы определить свою собственную самоисполняющуюся функцию:
(function(dialog) {
dialog.find('a.ok').click(function() {
$.ajax({ ... });
dialog.dialog('close');
});
dialog.find('a.cancel').click(function() {
dialog.dialog('close');
});
})($('#dialog'));
Здесь нет лучшего, вы используете то, что соответствует вашим конкретным обстоятельствам и местным соглашениям.