2014-09-15 3 views
0

Мой коллега создал шаблон с угловыми. Он состоит из меню, которое может быть закрыто. Это достигается простым jQuery. Однако после нажатия кнопки закрытия нижняя часть меню-div остается. Если мышь перемещается, она исчезает. Я не могу воспроизвести ошибку в js скрипке. Почему части остаются, как это исправить?После скрытия частей останков div

HTML

<div class="menu"> 
    <button class="close"> X close this </button> 
</div> 

CSS

.menu{ 
    width: 100px; 
    height: 200px; 
    padding: 20px; 
    background: lightgrey; 
} 

.hide{ 
    display: none; 
} 

JS

$('body').on('click', '.close', function(){ 
    $(this).closest('.menu').addClass('hide'); 
}); 

/// also does not work 
$('body').on('click', '.close', function(){ 
    $(this).closest('.menu').hide(); 
}); 
+0

Почему бы не использовать функцию hide? –

+0

Не уверен, что это будет иметь какой-либо эффект здесь, но никогда не будет использовать '' body'' для делегированных событий. Вместо этого используйте 'document'. Стиль 'body' может привести к тому, что события не будут гореть (особенно нажмите) –

+0

Можете ли вы включить части, которые вызывают проблему? Как вы сказали, это не воспроизводится в JS Fiddle] (http://jsfiddle.net/adnywjg6/). Для нас это будет игра для угадываний. – Stryner

ответ

0

Прежде всего вы используете angularjs, и вы не можете использовать JQuery, как на стандартных веб-сайтов. у вас есть этот JS:

$('body').on('click', '.close', function(){ 
    $(this).closest('.menu').addClass('hide'); 
}); 

, но в момент, когда этот скрипт выполняется не HTML оказываемых на страницу, так что этот сценарий является usless.

Для выполнения этой работы вам необходимо создать специальную директиву.

.directive('ngHideCustom', function() { 
    return function (scope, elm, attrs) { 
     $('.close', elm).click(function() { 
      $(this).parent().hide(); 
     }); 
    } 
}) 

и вам нужно изменить HTML, чтобы назвать эту директиву

<div class="menu" ng-hide-custom> 
    <button class="close"> X close this </button> 
</div> 

таким образом ваш сценарий будет применяться только тогда, когда эта часть HTML визуализируется на страницу.

+0

Re: * «HTML не отображается на страницу» *, означает ли это, если они использовали 'document' для делегированный обработчик событий, это сработало бы? (поскольку в это время существует 'document', он является делегированным обработчиком). –

Смежные вопросы