2013-08-01 4 views
0

Я пытаюсь показать всплывающую подсказку, если поле поиска получило пустое значение. После того, как показана всплывающая подсказка, я хочу привязать функцию щелчка к телу, чтобы снова скрыть всплывающую подсказку. Но по какой-то причине после добавления команды привязки к функции щелчка, всплывающая подсказка вообще не появится. Я уже проверил консоль, но без каких-либо результатов. Вот мой код:jQuery click + if + bind

$('#search_top .search_click').click(function() { 
    if($('#search_top #suchfeld').val() == '') { 
     $('.search_tooltip, .search_tooltip:after').css('display', 'block'); 
     $('.search_tooltip, .search_tooltip:after').addClass('active'); 
     $('body').bind('click', closeTip); 
    } 
    else { 
     $('#search_top').submit(); 
    } 
}); 


function closeTip() { 
     $('.search_tooltip, .search_tooltip:after').css('display', 'none'); 
} 

Кто есть идея?

+0

Дон» Не забывайте отвязать обработчик clickTip в программе closeTip. – BNL

+0

http://webdesignledger.com/tips/9-jquery-mistakes-you-shouldnt-commit 4) 5) – Virus721

ответ

1

Я бы не использовать этот вид кода, но, кажется, что вы ищете:

$('#search_top .search_click').click(function (e) { 
    e.stopPropagation(); 
    if ($('#search_top #suchfeld').val() == '') { 
     $('.search_tooltip').show().addClass('active'); 
    } else { 
     $('#search_top').submit(); 
    } 
}); 

$(function() { 
    $('body').bind('click', closeTip); 
}); 

function closeTip() { 
     $('.search_tooltip').hide(); 
} 
+0

Работал безукоризненно. Я не понимаю, почему функция связывать функцию закрытия closeTip после вскрытия всплывающей подсказки? – Basti

+1

Потому что при нажатии на событие .search_click распространяется на тело, а затем закрывает всплывающую подсказку. Вот почему я использую 'e.stopPropagation();' –

+0

Не знаю об этой функции, это довольно круто, спасибо большое! :-) – Basti

0

:before и :after (и другие псевдо элементы) недоступны с помощью Javascript. Вы должны изменить класс родительского объекта в духе следующего:

div:before { 
    content: 'Lorem ipsum'; 
    display: none; 
} 

div.active:before { 
    display: block; 
} 
+0

Вы в этом уверены? Потому что мое это сработало без проблем: $ ('. Search_tooltip, .search_tooltip: after'). Css ('display', 'block'); $ ('. Search_tooltip, .search_tooltip: after'). AddClass ('active'); – Basti

+0

Было уже несколько вопросов, в том числе [этот] (http://stackoverflow.com/questions/17108475/cant-edit-css-styles-for-before-after) – adrenalin