Отключение нормального поведения ссылки при нажатии с помощью оператора if в Jquery? - PullRequest
2 голосов
/ 22 мая 2010

Я весь день бился с этим, пытаясь что-нибудь и все, о чем я могу думать, безуспешно. Я не гуру Jquery, поэтому я надеюсь, что кто-то здесь может мне помочь. То, что я пытаюсь сделать в псевдокоде (концепции), кажется практичным и простым в реализации, но, очевидно, не так = D

У меня есть навигационная боковая панель с подменю в некоторых ли и ссылками в начале каждого ли.

Когда нажимается ссылка верхнего уровня, я хочу, чтобы jquery проверил, есть ли у ссылки одноименный ul. Если это так, ссылка не действует как ссылка, а скользит по дочерней под-навигации. Если его нет, ссылка должна работать нормально.

Вот где я сейчас нахожусь, что я делаю не так?

$('ul.navigation li a').not('ul.navigation li ul li a').click(function (){
    if($(this).parent().contains('ul')){
        $('ul.navigation li ul').slideUp();
        $(this).siblings('ul').slideDown();
        return false;
    }
    else{
        alert('Link Clicked')
        // Maybe do some more stuff in here...
    }
});

Есть идеи?

1 Ответ

3 голосов
/ 22 мая 2010

Для "что я делаю неправильно?" часть ... нет .contains() метода :) Есть $.contains(), который отличается, но не то, что Вы хотите здесь ... Вы хотите проверить .length свойство . Я не могу быть уверен на 100% без вашей разметки, но если <a> и <ul> являются братьями и сестрами, я рад, что вы ищете:

$('ul.navigation > li > a').click(function (){
    if($(this).siblings('ul').length){
        $('ul.navigation > li > ul').slideUp();
        $(this).siblings('ul').slideDown();
        return false;
    } else{
        alert('Link Clicked');
        // Maybe do some more stuff in here...
    }
});

Рабочую демонстрацию можно посмотреть здесь :)

...