Добрый день! Есть форма которая подгружается Ajax Link (код ниже). Но если кликнуть после отработки AJAX по ссылке ещё раз, форма подгружается 2 и более раз, как заблокировать повторную обработку AJAX Link, а потом снова разблокировать когда это будет нужно? Обработчик вешается непосредственно на обьект?Пробовал удалять классы, href'ы всёравно обрабатывается.
<?phpfunction myfeedback_menu() {
$items = array();
$items['ajax_link_callback'] = array(
'page callback' => 'ajax_link_response',
'access callback' => 'user_access',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function ajax_link_response($type = 'ajax') {
$form = drupal_get_form('myfeedback_form');
if ($type == 'ajax') {
$output = drupal_render($form);
$commands = array();
$commands[] = ajax_command_append('.region-feedback', $output);
$commands[] = myfeedback_ajax_command_feedbackShow();
$page = array('#type' => 'ajax', '#commands' => $commands);
ajax_deliver($page);
}
else {
return $form;
}
}
?>
Комментарии
Думаю тут проще было бы свой обработчик ajax на ссылку повесить, который при клике по ссылке будет отключать повторную подгрузку на некоторое время или до выполнения определенного условия.
Типа
Drupal.behaviours.myAjaxLink = function() {
attach: function(context, settings) {
$('.my-ajax-link-class).click(function() {
if(myCondition()) {
$.ajax(function()...);
}
return false;
});
}
}
})(jQuery);
Кто-нибудь решил?
Думается мне, что ajax обработчик на ссылку вы навешиваете сами. В таком случае обработчик нужно обернуть в функцию once
// your handler.
});
Или же вы можете просто добавить к ссылке класс "use-ajax" и тогда drupal решит все ваши проблемы.
где то видел что нужно использовать параметр текущего контекста $('.my-ajax-link-class).click(function(context) {
Drupal.behaviours.myAjaxLink = function() {
attach: function(context, settings) {
$('.my-ajax-link-class).click(function(context) {
if(myCondition()) {
$.ajax(function()...);
}
return false;
});
}
}
})(jQuery);
Можно использовать контекст. Но немного по-другому.
Drupal.behaviors.myAjaxLink = {
attach: function (context, settings) {
var $link = $(context).find('.my-ajax-link-class');
if ($link.length) {
$link.click(function (context) {
$.ajax(function () {
/*...*/
});
return false;
});
}
}
};
})(jQuery);
ЗЫ: У вас в коде синтаксические ошибки.
код из первого коммента, я только context добавил параметр
А ок, тогда сорри.