三項演算子が「hasClass」の使用で機能しないのはなぜですか?

l3lue

練習用にjQueryを使用して独自のスライドプラグインを作成しています。問題は、理由はわかりませんが、何らかの理由で三項演算子が機能しないことです。スライダーは、ユーザーがprevコードから条件として登録したボタンをクリックしたときにのみ応答します

ユーザーがnextボタンを押すと右側に移動するはずだと思っていましたが、nextボタンが完全に壊れています。

この問題を解決するために、2つの異なるトリガーボタンを作成し、複数のifステートメントを使用することもできますが、三項演算子を使用して1行にマージし、コードを可能な限り最小化します。

この問題をどのように解決しますか?

コードブロック:

(function($) {
  $.fn.sliderModule = function(options) {
    const defaults = {
      myGallery: $(this)
    };
    var settings = $.extend({
      myItems: null,
      trigger: null,
      current: null
    }, defaults, options);
    $(settings.trigger).on('click', function() {
      if (!(defaults.myGallery.is(':animated'))) {
        var movement = settings.trigger.hasClass('prev') ? -1 : 1
        defaults.myGallery.animate({left: "+=" + (100 / settings.current) * movement  + '%'}); // It doesn't respond the `next` button.
      };
    });
  };
})(jQuery);
$(function() {
  $('#slide-list').sliderModule({
    myItems: '#img-slider',
    trigger: $('#buttons').find('#button'),
    current: 4
  });
})
li {
  list-style-type: none;
}

#slide-container {
  position: relative !important;
  width: 1170px;
  margin: 0 auto;
  overflow: hidden;
  height: auto;
}
#slide-list {
  margin: 0 auto;
  position: relative;
  display: flex;
  width: 1170px;
}
#buttons {
  width: 1170px;
  margin: 0 auto;
  display: flex;
  justify-content: center;
}
#buttons li {
  margin: 0 20px;
}
.slide-l-quarter {
  flex-shrink: 0;
  position: relative;
  white-space: nowrap;
  width: calc(100% / 4);
}
.slide-l-quarter img {
  width: 100%;
  height: auto;
}
<div id="slide-container">
  <ul id="slide-list">
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/PVsHlX9.jpg" alt="">
    </li>
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/WfWhNnU.jpg" alt="">
    </li>
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/eqHdnNs.jpg" alt="">
    </li>
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/0jziABY.jpg" alt="">
    </li>
  </ul>
</div>
<ul id="buttons">
  <li id="button" class="prev">Prev</li>
  <li id="button" class="next">Next</li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

blex

三項演算子の使用に問題はありません。しかし、あなたは途中でいくつかの間違いを犯しました。

IDは一意である必要があります

これをHTMLに含めることはできません。

<li id="button" class="prev">Prev</li>
<li id="button" class="next">Next</li>

同じセレクターを持つために複数の要素が必要な場合は、代わりにクラスを使用してください。

<li class="button prev">Prev</li>
<li class="button next">Next</li>

settings.trigger 両方のボタンを選択します

これを行うとき:

settings.trigger.hasClass('prev')

両方のボタンを参照しています。ユーザーがクリックしたものだけが必要です。

$(this).hasClass('prev')

修正バージョン

(function($) {
  $.fn.sliderModule = function(options) {
    const defaults = {
      myGallery: $(this)
    };
    var settings = $.extend({
      myItems: null,
      trigger: null,
      current: null
    }, defaults, options);
    $(settings.trigger).on('click', function() {
      if (!(defaults.myGallery.is(':animated'))) {
        var movement = $(this).hasClass('prev') ? -1 : 1;
        defaults.myGallery.animate({left: "+=" + (100 / settings.current) * movement  + '%'});
      };
    });
  };
})(jQuery);
$(function() {
  $('#slide-list').sliderModule({
    myItems: '#img-slider',
    trigger: $('#buttons').find('.button'),
    current: 4
  });
})
li {
  list-style-type: none;
}

#slide-container {
  position: relative !important;
  width: 1170px;
  margin: 0 auto;
  overflow: hidden;
  height: auto;
}
#slide-list {
  margin: 0 auto;
  position: relative;
  display: flex;
  width: 1170px;
}
#buttons {
  width: 1170px;
  margin: 0 auto;
  display: flex;
  justify-content: center;
}
#buttons li {
  margin: 0 20px;
}
.slide-l-quarter {
  flex-shrink: 0;
  position: relative;
  white-space: nowrap;
  width: calc(100% / 4);
}
.slide-l-quarter img {
  width: 100%;
  height: auto;
}
<div id="slide-container">
  <ul id="slide-list">
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/PVsHlX9.jpg" alt="">
    </li>
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/WfWhNnU.jpg" alt="">
    </li>
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/eqHdnNs.jpg" alt="">
    </li>
    <li class="slide-l-quarter" id="image-slider">
      <img src="https://i.imgur.com/0jziABY.jpg" alt="">
    </li>
  </ul>
</div>
<ul id="buttons">
  <li class="button prev">Prev</li>
  <li class="button next">Next</li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

三項演算子が機能し、他の演算子がReactJSXで機能しないのはなぜですか

分類Dev

jsxの三項演算子が機能しないのはなぜですか

分類Dev

この方法が機能しないのはなぜですか?Java三項演算子

分類Dev

三項if / else演算子の使用中にインクリメント演算子(++ /-)が機能しないのはなぜですか?

分類Dev

Rubyでは、各ステートメント内でputs関数を使用すると、なぜ三項演算子が機能しないのですか?

分類Dev

演算子forkJoinが機能しないのはなぜですか?

分類Dev

ここでJavaが三項演算子の使用を許可しないのはなぜですか?

分類Dev

なぜ私は私の三項演算子でNullPointerExceptionが取得していますか?

分類Dev

`LIKE`演算子が整数列で機能しないのはなぜですか?

分類Dev

OR演算子がWHERE句で機能しないのはなぜですか?

分類Dev

この論理演算子が機能しないのはなぜですか?

分類Dev

列挙後に比較演算子が機能しないのはなぜですか?

分類Dev

三項演算子で復帰できないのはなぜですか?

分類Dev

三項演算子で参照を選択できないのはなぜですか?

分類Dev

この三項演算子の構文が無効なのはなぜですか?

分類Dev

パイプ演算子のこの使用が機能しないのはなぜですか?

分類Dev

C ++ 20で範囲を使用すると、パイプ演算子が機能しないのはなぜですか?

分類Dev

三項演算子の状態の値が機能しないスタイルで

分類Dev

三項演算子でローカル変数が使用されている場合、intからshortへのナローイング変換が機能しないのはなぜですか

分類Dev

Perlの「一致しない」演算子がここで機能しないのはなぜですか?

分類Dev

三項演算子が状態プロパティに取り組んでいないのはなぜですか

分類Dev

'decltype'が静的である場合、なぜ三項演算子はテンプレートの末尾の戻り値の型で機能するのですか?

分類Dev

三項演算子の使用中に例外をスローできないのはなぜですか

分類Dev

なぜswiftの三項演算子はとてもうるさいのですか?

分類Dev

Powershellの三項演算子が私の値を割り当てないのはなぜですか?

分類Dev

なぜ三項演算子は、代入(左側の変数)なしで使用することはできませんか?

分類Dev

Haskell $演算子:なぜこれが機能しないのですか?

分類Dev

三項演算子で使用したときにstd :: ostreamがコンパイルされないのはなぜですか?

分類Dev

三項演算子で矢印関数が機能しない

Related 関連記事

  1. 1

    三項演算子が機能し、他の演算子がReactJSXで機能しないのはなぜですか

  2. 2

    jsxの三項演算子が機能しないのはなぜですか

  3. 3

    この方法が機能しないのはなぜですか?Java三項演算子

  4. 4

    三項if / else演算子の使用中にインクリメント演算子(++ /-)が機能しないのはなぜですか?

  5. 5

    Rubyでは、各ステートメント内でputs関数を使用すると、なぜ三項演算子が機能しないのですか?

  6. 6

    演算子forkJoinが機能しないのはなぜですか?

  7. 7

    ここでJavaが三項演算子の使用を許可しないのはなぜですか?

  8. 8

    なぜ私は私の三項演算子でNullPointerExceptionが取得していますか?

  9. 9

    `LIKE`演算子が整数列で機能しないのはなぜですか?

  10. 10

    OR演算子がWHERE句で機能しないのはなぜですか?

  11. 11

    この論理演算子が機能しないのはなぜですか?

  12. 12

    列挙後に比較演算子が機能しないのはなぜですか?

  13. 13

    三項演算子で復帰できないのはなぜですか?

  14. 14

    三項演算子で参照を選択できないのはなぜですか?

  15. 15

    この三項演算子の構文が無効なのはなぜですか?

  16. 16

    パイプ演算子のこの使用が機能しないのはなぜですか?

  17. 17

    C ++ 20で範囲を使用すると、パイプ演算子が機能しないのはなぜですか?

  18. 18

    三項演算子の状態の値が機能しないスタイルで

  19. 19

    三項演算子でローカル変数が使用されている場合、intからshortへのナローイング変換が機能しないのはなぜですか

  20. 20

    Perlの「一致しない」演算子がここで機能しないのはなぜですか?

  21. 21

    三項演算子が状態プロパティに取り組んでいないのはなぜですか

  22. 22

    'decltype'が静的である場合、なぜ三項演算子はテンプレートの末尾の戻り値の型で機能するのですか?

  23. 23

    三項演算子の使用中に例外をスローできないのはなぜですか

  24. 24

    なぜswiftの三項演算子はとてもうるさいのですか?

  25. 25

    Powershellの三項演算子が私の値を割り当てないのはなぜですか?

  26. 26

    なぜ三項演算子は、代入(左側の変数)なしで使用することはできませんか?

  27. 27

    Haskell $演算子:なぜこれが機能しないのですか?

  28. 28

    三項演算子で使用したときにstd :: ostreamがコンパイルされないのはなぜですか?

  29. 29

    三項演算子で矢印関数が機能しない

ホットタグ

アーカイブ