0

HTMLページに同じjqueryポップアップへの複数のリンクがあります。ポップアップ内の実際のフォームは、どのリンクがそのポップアップを表示したかによって異なります。ただし、実際のポップアップ自体は同じになります。ページのコンテンツは動的であり、ポップアップへのリンクがどこに表示され、どのフォームが含まれるかはわかりません。

実装に関して3つの問題があります。

  1. クリックしてポップアップを表示するためのリンクとして使用するボタン(画像)は、ポップアップとそれに含まれるテキストを介して表示されます。さまざまな場所でさまざまな値にcssのz属性を設定しようとしましたが、効果はありませんでした。

  2. ポップアップ内のフォームが無効になっている間、ボタンリンクはフォアグラウンドにとどまり、クリック可能です。

  3. 別のボタンのリンクをクリックすると、2番目のポップアップが表示されます。2番目のポップアップが表示される前に、最初のポップアップを閉じてください。

jsFiddleの例で問題を確認できます:http: //jsfiddle.net/azxf4/2/

ポップアップ.css

.popbox {
margin:0px auto;
text-align:center;
position:relative;
}


.collapse { position:relative; }

 .box {
  display:block;
  display:none;
  background:#FFF;
  border:solid 1px #BBBBBB;
  border-radius:5px;
  box-shadow:0px 0px 15px #999;
  position:absolute;
}
.open {}

  .box a.close {
   color:red;
   font-size:12px;
   font-family:arial;
   text-decoration:underline;
  }

  .arrow {
    width: 0;
    height: 0;
    border-left: 11px solid transparent;
    border-right: 11px solid transparent;
    border-bottom: 11px solid #FFF;
    position:absolute;
    left:1px;
    top:-10px;
    z-index:1001;
  }

  .arrow-border {
    width: 0;
    height: 0;
    border-left: 11px solid transparent;
    border-right: 11px solid transparent;
    border-bottom: 11px solid #BBBBBB;
    position:absolute;
    top:-12px;
    z-index:1000;
  }

popup.js

(function(){

$.fn.popbox = function(options){
var settings = $.extend({
  selector      : this.selector,
  open          : '.open',
  box           : '.box',
  arrow         : '.arrow',
  arrow_border  : '.arrow-border',
  close         : '.close'
}, options);
var methods = {
  open: function(event){
    event.preventDefault();
    var pop = $(this);
    var box = $(this).parent().find(settings['box']);

    box.find(settings['arrow']).css({'left': box.width()/2 - 10});
    box.find(settings['arrow_border']).css({'left': box.width()/2 - 10});

    if(box.css('display') == 'block'){
      methods.close();
    } else {
      box.css({'display': 'block', 'top': 10, 'left': ((pop.parent().width()/2) -box.width()/2 )});
    }
  },

  close: function(){
    $(settings['box']).fadeOut("fast");
  }
};

$(document).bind('keyup', function(event){
  if(event.keyCode == 27){
    methods.close();
  }
});

$(document).bind('click', function(event){
  if(!$(event.target).closest(settings['selector']).length){
    methods.close();
  }
});

return this.each(function(){
  $(this).css({'width': $(settings['box']).width()}); // Width needs to be set otherwise popbox will not move when window resized.
  $(settings['open'], this).bind('click', methods.open);
  $(settings['open'], this).parent().find(settings['close']).bind('click', methods.close);
});
}

}).call(this);

html

<html>

<head></head>

<body>
    <div class='popbox'><a class='open' href='#'><img src='http://thezoovninc.com/images/Web/New%20folder/plusButton.png' width='30' height='30'></a>

        <div class='collapse'>
            <div class='box'>
                <div class='arrow'></div>
                <div class='arrow-border'></div>
                <form action='someActionPage.jsp' id='actionId'>
                    <p>test</p>
                    <div class='input'>Last Name:<input type='text' name='lastname' id='lastname' /> </div>
                    <div class='input'>First Name:<input type='text' name='firstname' id='firstname' /> </div>
                    <div class='close'>
                        <input type='submit' value='Add' /> <a href='#'>Cancel</a>
                    </div>
                </form>
            </div>
         </div>
      </div>


    <div class='popbox'><a class='open' href='#'><img src='http://thezoovninc.com/images/Web/New%20folder/plusButton.png' width='30' height='30'></a>

        <div class='collapse'>
            <div class='box'>
                <div class='arrow'></div>
                <div class='arrow-border'></div>
                <form action='someActionPage.jsp' id='actionId'>
                    <p>test</p>
                    <div class='input'>Last Name:<input type='text' name='lastname' id='lastname' /> </div>
                    <div class='input'>First Name:<input type='text' name='firstname' id='firstname' /> </div>
                    <div class='close'>
                        <input type='submit' value='Add' /> <a href='#'>Cancel</a>
                    </div>
                </form>
            </div>
         </div>
      </div>
 <div class='popbox'><a class='open' href='#'><img src='http://thezoovninc.com/images/Web/New%20folder/plusButton.png' width='30' height='30'></a>

        <div class='collapse'>
            <div class='box'>
                <div class='arrow'></div>
                <div class='arrow-border'></div>
                <form action='someActionPage.jsp' id='actionId'>
                    <p>test</p>
                    <div class='input'>Last Name:<input type='text' name='lastname' id='lastname' /> </div>
                    <div class='input'>First Name:<input type='text' name='firstname' id='firstname' /> </div>
                    <div class='close'>
                        <input type='submit' value='Add' /> <a href='#'>Cancel</a>
                    </div>
                </form>
            </div>
         </div>
      </div>

   <div class='popbox'><a class='open' href='#'><img src='http://thezoovninc.com/images/Web/New%20folder/plusButton.png' width='30' height='30'></a>

        <div class='collapse'>
            <div class='box'>
                <div class='arrow'></div>
                <div class='arrow-border'></div>
                <form action='someActionPage.jsp' id='actionId'>
                    <p>test</p>
                    <div class='input'>Last Name:<input type='text' name='lastname' id='lastname' /> </div>
                    <div class='input'>First Name:<input type='text' name='firstname' id='firstname' /> </div>
                    <div class='close'>
                        <input type='submit' value='Add' /> <a href='#'>Cancel</a>
                    </div>
                </form>
            </div>
         </div>
      </div>

      <script type="text/javascript" >
         $(document).ready(function () {
        $(".popbox").popbox();
    });
      </script>
      </body>

簡単なことだと思いますが、わかりません。どんなアドバイスも大歓迎です!

ありがとう

4

2 に答える 2

1

私はこの同じjQueryプラグインで同じ問題を抱えていました。

私はエキスパートプログラマーではありませんが、この行を追加することで問題を解決したようです。

$( "。box")。css({"display": "none"});

open関数の場合:

      open: function(event){
    event.preventDefault();

    var pop = $(this);
    var box = $(this).parent().find(settings['box']);

     $(".box").css({"display": "none"});

    box.find(settings['arrow']).css({'left': box.width()/2 - 10});
    box.find(settings['arrow_border']).css({'left': box.width()/2 - 10});

    if(box.css('display') == 'block'){
      methods.close();
    } else {
      box.css({'display': 'block', 'top': 10, 'left': ((pop.parent().width()/2) -box.width()/2 )});
    }
  },
于 2013-03-17T21:36:37.400 に答える
0

すべてのポップアップを閉じるには、次の手順を試してください。「閉じる」イベントリスナーを追加しますb。他のポップアップボックスを開く前に、閉じるように呼び出します

(function(){

$.fn.popbox = function(options){
var settings = $.extend({
  selector      : this.selector,
  open          : '.open',
  box           : '.box',
  arrow         : '.arrow',
  arrow_border  : '.arrow-border',
  close         : '.close'
}, options);
var methods = {
  open: function(event){
    event.preventDefault();
    var pop = $(this);
    var box = $(this).parent().find(settings['box']);

    $(settings['open']).trigger("close"); // trigger a close event for all 

    box.find(settings['arrow']).css({'left': box.width()/2 - 10});
    box.find(settings['arrow_border']).css({'left': box.width()/2 - 10});

    if(box.css('display') == 'block'){
      methods.close();
    } else {
      box.css({'display': 'block', 'top': 10, 'left': ((pop.parent().width()/2) -box.width()/2 )});
    }
  },

  close: function(){
    $(settings['box']).fadeOut("fast");
  }
};

$(document).bind('keyup', function(event){
  if(event.keyCode == 27){
    methods.close();
  }
});

$(document).bind('click', function(event){
  if(!$(event.target).closest(settings['selector']).length){
    methods.close();
  }
});

return this.each(function(){
  $(this).css({'width': $(settings['box']).width()}); // Width needs to be set otherwise popbox will not move when window resized.
  $(settings['open'], this).bind('click', methods.open);
  $(settings['open'], this).parent().find(settings['close']).bind('click', methods.close);
  $(this).bind('close', methods.close); // have a close event
});
}

}).call(this);

-そしてこれは#1のCSS修正です(IE8とFF18を試しました)

.box {
  display:block;
  display:none;
  background:#FFF;
  border:solid 1px #BBBBBB;
  border-radius:5px;
  box-shadow:0px 0px 15px #999;
  position:absolute;
  z-index: 1000;
}
于 2013-01-18T20:10:43.117 に答える