Простые модальные проблемы - множественные, исчезающее содержимое

Я новичок в jQuery и настроил Simple Modal, чтобы позволить мне иметь более одного модального окна на странице, сделав это в моем скрипте:

$('input.basic, a.basic').click(function (e) { e.preventDefault(); $(this).next('.basicModalContent').modal(); });

вот мой HTML:

    <a class="basic linkHeading" href="#">Link Heading</a>

 <div class="basicModalContent" style="display: none;">
    <h1>This Resource Requires Login</h1>
    <a href="#" class="simplemodal-close" title="Close">Cancel</a></p>
</div><!--basicModal-->

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

см. эту ссылку, чтобы узнать об ошибке в действии: http://blanksky.com/test/ebenefits21/modal.html


person Community    schedule 02.11.2009    source источник


Ответы (3)


Я бы предложил что-то вроде:

Ссылки:

<a href="#" class="basic" id="link-1">link1</a>
<a href="#" class="basic" id="link-2">link2</a>
<a href="#" class="basic" id="link-3">link3</a>

Скрытый контент (через CSS или встроенный стиль)

<div id="link-1-content" style="display:none">
<p>content</p>
</div>
<div id="link-2-content" style="display:none">
<p>content</p>
</div>
<div id="link-3-content" style="display:none">
<p>content</p>
</div>

JavaScript:

$(document).ready(function () {
      $('#basic-modal input.basic, #basic-modal a.basic').click(function (e) {
              e.preventDefault();
              var content = '#' + this.id + '-content';
              $(content).modal();
      });
});

Что-то вроде этого должно помочь.

person Eric Martin    schedule 02.11.2009
comment
это прекрасно, большое спасибо, Эрик (ваша служба поддержки - ЛУЧШАЯ !!) - person ; 04.11.2009

Когда вы скрываете диалоговое окно, jQuery изменяет положение div в DOM, а затем, желая найти его с помощью «$(this).next(...)», вы не можете этого сделать. У вас должен быть какой-то идентификатор или ссылка, чтобы найти в противном случае.

РЕДАКТИРОВАТЬ: Ну, вы заставили меня думать немного эхо. Надеюсь, код, который я прохожу, будет полезным. Я не тестировался:

$('input.basic, a.basic').click(function (e) 
{ 
   e.preventDefault(); 
   var el = "";

   if($(this).data("xid")!=undefined)
   {
      el = $($(this).data("xid"));
   }
   else
   {
     var xid = "xid_" + ((new Date()).getTime());
     el = $(this).next('.basicModalContent');
     $(this).data("xid", xid);
     if (el.lenght>0)
       el.attr("id", xid);
   }

   if (el.lenght>0)
   {
     el.modal();
   }
});
person andres descalzo    schedule 02.11.2009
comment
страница извлекает динамический контент, поэтому я не могу узнать, сколько может быть модальных ссылок или как на них ссылаться. - person ; 02.11.2009

Решение, требующее меньше разметки, - использовать одно модальное «окно». См. Следующий пример:


<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>Simple Modal Demo</title>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
 <script type="text/javascript" src="simplemodal.js"></script>
 <script type="text/javascript">
  $(document).ready(
    function() {
     $('.loginRequired').bind('click',
      function() {
       $('#clickedLink').html(this.id);
       $('#modalWindow').modal();
       return false;
      }
     );
    }
  );
 </script>

 <style>
  #simplemodal-container { display: none; }
  #simplemodal-overlay { background: #000; opacity: 0.4; }
  #modalWindow {
   background: #FFF;
   border: 1px solid black;
   height: 100px;
   opacity: 1.0;
   padding: 10px;
   position: relative;
   width: 220px;
   z-index: 1010;
  }
 </style>
</head>
<body>
 <p><a href="http://example.com/" id="link1" class="loginRequired">Login Required Link</a></p>
 <p><a href="http://example.com/" id="link2" class="loginRequired">Login Required Link</a></p>
 <p><a href="http://example.com/" id="link3" class="loginRequired">Login Required Link</a></p>
 <p><a href="http://example.com/">http://example.com/</a></p>

 <div id="simplemodal-container">
  <div id="modalWindow">
   <p>Sorry, you must login to click <b id="clickedLink">unknown</b>.</p>
   <p><a href="#" class="simplemodal-close">Cancel</a></p>
  </div>
 </div>

</body>
</html>

person James Sumners    schedule 10.11.2009