jQuery / Bootstrap: дочерний DIV открывает родительский модальный

#javascript #jquery #html #css #twitter-bootstrap

#javascript #jquery #HTML #css #twitter-bootstrap

Вопрос:

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

  $('#parent').click(function() {
  $('.parent').modal('show');
});
    
$('#child').click(function() {
  $('.parent').modal('hide'); // Added to try and hide
  $('.child').modal('show');
  $('.parent').modal('hide'); // Added to try and hide
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent">
  <div id="child">
  </div>
 </div>
    

Дело в том, что когда я нажимаю на дочерний div, родительский диалог также отображается за дочерним диалогом.

Есть ли способ обойти это?

Комментарии:

1. Помогает ли вам e.preventDefault() $('#child').click(function(e) { e.preventDefault(); //do others); ?

2. К сожалению, нет

Ответ №1:

Это происходит потому, что ваше дочернее событие щелчка переходит к родительскому. Используйте e.stopPropogation() для дочернего div. Это предотвратит распространение вашего события click на родительский элемент.

 $('#parent').click(function() {
  $('.parent').modal('show');
});
    
$('#child').click(function(e) {
  e.stopPropogation();
  $('.parent').modal('hide'); // Added to try and hide
  $('.child').modal('show');
  $('.parent').modal('hide'); // Added to try and hide
});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent">
  <div id="child">
  </div>
 </div>  

Комментарии:

1. Обнаружил, что это то, что мне было нужно, но я приму ваш ответ, спасибо!

2. Я этого не сделал. В то время я не мог этого сделать, но теперь я подожду немного дольше.

Ответ №2:

Вы можете легко справиться с такими случаями, указав цель в атрибуте, как показано ниже.

 $('#parent, #child').click(function() {
   var target = $(this).data('target');
   $('.' target).modal('show');
   // write code to hide others if necessary
});
  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent" data-target="parent">
  <div id="child" data-target="child">
  </div>
 </div>
  

Ответ №3:

Попробуйте это, прежде чем показывать модальный:

  $( '.modal' ).remove();
$( '.child' ).modal('show');
  

Удалите модальный перед использованием show . Надеюсь, это исправит вашу проблему