0

言語: jQuery / Javascript / PHP

ユーザーがリンクをクリックすると、非表示の DIV を表示しようとしています。

タグ内data-actionに付加された内部の値に応じて、実行する必要がある 3 種類のアクションがあります。href

可能な値は 3 つあります。

  • 振る
  • 跳ねる、弾む
  • デフォルト(私の問題)

ここでswitchを使用して、Javascript コードでこれらのアクションを切り替えます。

私の問題は、ターゲットにしようとしている非表示の div を表示できないことです (デフォルトのコードは、問題が発生している場所です)。

JSfiddle: http://jsfiddle.net/ryxcw/1/ (問題は 59 行目から始まります)

使用中の Javascript コード:

function loadBubbleActions() {
  $('#container > a').each(function () {

    switch ($(this).attr('data-action')) {
      case "shake":
        //bind shake action to bubble
        $(this).live("click", function (e) {


          var props = $.parseJSON($(this).attr('data-action-properties'));
          var ox = $(this).css('left').replace('px', '');
          var oy = $(this).css('top').replace('px', '');
          if ($('#tae').length == 0) {

            var overlay = jQuery('<div id="overlay" style="background-color: #fff !important; background-image: url(images/texture-shake.jpg);"> </div>');
            overlay.appendTo(document.body)

            $(document.body).append('<div id="tae" class="shake" style="position:absolute;opacity:1;z-index:12000;">Info goes here</div>');

            $('#overlay').click(function () {

              $('#overlay').remove();
              $('#tae').remove();

            });


            var cssWidth = ($(this).css('width').replace('px', '') / 2 - 20);
            var cssHeight = ($(this).css('height').replace('px', '') / 2 - 20);
            var ss = ($(window).width() / 2);
            var dd = ($(window).height() / 2);

            $('#tae').css('left', (ss - cssWidth) + "px");
            $('#tae').css('top', (dd - cssHeight) + "px");


            $('#tae').effect("shake", {
              times: 5
            }, 500);
          } else {
            $('#tae').effect("shake", {
              times: 5
            }, 500);

          }
        });

        break;



      case "bounce":
        //do specific action stuff here

        $(this).live("click", function (e) {
          alert("This is a bouncing post " + $(this).attr('data-link'));
        });
        break;
      default:
        //do action code for default here
        $(this).live("click", function (e) {

          divID = $(this).attr('id');

          var props = $.parseJSON($(this).attr('data-action-properties'));
          var act = $(this).attr('data-action');
          var ox = $(this).css('left').replace('px', '');
          var oy = $(this).css('top').replace('px', '');
          if ($('.panda').length == 0) {

            $("#theDIV-" + divID).show();
            $("#overlay").show();

            $('#overlay').click(function () {

              $('#overlay').remove();
              $('.panda').remove();

            });


            var cssWidth = ($(this).css('width').replace('px', '') / 2 + 400);
            var cssHeight = ($(this).css('height').replace('px', '') / 2 - 20);
            var ss = ($(window).width() / 2);
            var dd = ($(window).height() / 2);

            $('.panda').css('left', (ss - cssWidth) + "px");
            $('.panda').css('top', "100px");
          } else {
            //$('#tae').effect("shake", { times:props.shakeNumber }, 200);
          }

        });
    }
  });
}

私は本当に誰かが助けてくれることを願っています. お時間をいただきありがとうございました!

もう一度、便宜上 JsFiddle を示します --
JSfiddle: http://jsfiddle.net/ryxcw/1/ (問題は 59 行目から始まります)

4

2 に答える 2

2

あなたはこれをやっています

if ($('.panda').length==0) {
      $("#theDIV-" + divID).show();

しかし、$('.panda').length1を返すのは

<div class="panda hiddenDIV" id="theDIV-77" style="position:absolute;z-index:12000;">This is the content</div>

アクション$("#theDIV-" + divID).show();が実行されないように存在します。

http://jsfiddle.net/ryxcw/2/

傍白

使用した場所で使用$(this).live()する必要があります$(this).on()(ただし、ライブは引き続き機能します)。

データを間違って使用しています。data-action="something"実行時にDOMに保存されます。.data('action')あなたはnotを使用してそのコンテンツにアクセスします.attr('data-action')

また、私はポインティに同意する必要があります。「コードに多くの問題がある」ということはそれほど多くありませんが、むしろ、あなたは多くの問題を抱えています。

于 2013-01-05T22:34:46.253 に答える
2

.live()CSSセレクター文字列以外でjQueryオブジェクトを生成する場合は使用できません。あれは、

$(this).live(whatever)

動作しません。(それは真実ではありません。委任しようとしている場合.live()はセレクター文字列なしでは機能しませんが、ハンドラーが要素に直接存在する場合は機能します。それでも多少奇妙な場合があり、とにかく非推奨になります:- )。.live()

<div>また、クリックされた要素の「id」値を見て、を見つけたいようです。2つの異なる要素に同じ「id」を指定することはできないため、これはあまり意味がありません(できますが、うまく機能しません)。<a>いずれにせよ、タグに「id」値を 指定していません。(編集-わかりました。「id」の一部として「id」を使用しています。それでも<a>、その要素には「id」はありません。)<div><a>

そのコードには本当に多くの間違いがあります。もっと簡単なことから始めて、上手くいくべきだと思います。

于 2013-01-05T22:10:19.177 に答える