отключить функцию .click на якоре в jquery - PullRequest
2 голосов
/ 26 декабря 2010

Это написано во внешнем .js с помощью jquery ...

У меня есть два окна, которые выдвигаются и исчезают, например:

$(document).ready(function() {
  // hides gallery1 as soon as the DOM is ready  
  $('#gallery1').hide();  
  // shows the menu on click   
  $('#showgal1').click(function() {  
    $('#gallery1').delay(490).show('slide', {direction:'left'});
    $('#gallery2').hide('slide', {direction:'right'});
    //need code to disable showgal1 and enable showgal2
  });
  $('#showgal2').click(function() {  
    $('#gallery2').delay(490).show('slide', {direction:'right'});
    $('#gallery1').hide('slide', {direction:'left'});
    //need code to disable showgal2 and enable showgal1
  });
});

'gallery1' и 'gallery2'являются DIV с галереями изображений flash, а' showgal1 'и' showgal2 'являются идентификаторами якорей ...

выглядит как

<a href="#" id="showgal1">gallery 1</a>

Я не могу найти способ отключить функцию .clickпри нажатии одной и повторной активации другой ...

я хочу отключить «showgal1» по умолчанию, а когда происходит событие «showgal2», он удаляет атрибут и отключает «showgal2» до тех пор, пока «showgal1»нажата ...

.attr('disabled','disabled') еще не работает ...

Ответы [ 5 ]

1 голос
/ 26 декабря 2010

То есть вы хотите остановить любое действие при нажатии showgal, если соответствующая галерея уже видна?

$('#showgal1').click(function(){
    if($('#gallery1').is(":visible"))
       return false;

    $('#gallery1').delay(490).show('slide', {direction:'right'});
    $('#gallery2').hide('slide', {direction:'left'});

});

$('#showgal2').click(function(){
    if($('#gallery2').is(":visible"))
       return false;
    $('#gallery2').delay(490).show('slide', {direction:'right'});
    $('#gallery1').hide('slide', {direction:'left'});

});

Первые 2 строки каждой функции click остановят функцию, еслисоответствующая галерея уже видна.

0 голосов
/ 26 декабря 2010

Я не уверен, что полностью понимаю ваш вопрос, но я думаю, что вы хотите запретить ссылке вызывать обработчик клика, если галерея уже показана.

Я бы использовал функцию данных jQuery для храненияАктивное состояние галереи как true / false:

$('#showgal1').click(function() {
    var $gal1 = $(this), $gal2 = $('#gallery2');
    if(!$('#gallery1').data('active')){
        $gal1.delay(490).show('slide', {direction:'left'}).data('active', true);
        $gal2.hide('slide', {direction:'right'}).data('active', false);
    }
});
0 голосов
/ 26 декабря 2010

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

0 голосов
/ 26 декабря 2010

Вы можете добавить класс «отключен» к ссылке, когда она нажата. Обратите внимание, что это не отключит ссылки само по себе и не установит атрибут disabled, как вы пытались, поскольку можно отключить только такие элементы формы, как входы и кнопки. Но вы можете проверить в своих обработчиках кликов, есть ли класс, и если он есть, ничего не делать:

$("#showgal1").hide();
$("#showgal2").addClass("disabled");

// shows the menu on click   
$('#showgal1').click(function() {  
   if ($(this).hasClass("disabled")) return false;

   // Note the extra .addClass or .removeClass on the end
   $('#gallery1').delay(490).show('slide', {direction:'left'}).addClass("disabled");
   $('#gallery2').hide('slide', {direction:'right'}).removeClass("disabled");
});
$('#showgal2').click(function() {  
   if ($(this).hasClass("disabled")) return false

   $('#gallery2').delay(490).show('slide', {direction:'right'}).addClass("disabled");
   $('#gallery1').hide('slide', {direction:'left'}).removeClass("disabled");
});

Преимущество добавления класса в том, что вы можете использовать CSS, чтобы создать видимость отключенной кнопки:

.disabled {
   color: grey;
}
0 голосов
/ 26 декабря 2010

Попробуйте это:

.attr('onclick','void(0)');
...