0

私は以前のスレッドに基づいたソリューションを実装しています。その主な目的は、Magentoでストアが開いているかどうかを確認することです。開いていれば大丈夫です。そうでない場合は、[カートに追加]ボタンを無効にして、勤務時間のテキストにカーソルを合わせる必要があります。

このソリューションは次のことを行います。

  1. AJAXを介してサーバーの現在時刻を取得する
  2. この時間を使って状態を確認してください
  3. 上記の結果に基づいて、ボタン要素にクラスを割り当てるかどうかを決定します。

ただし、テストの結果、クラスが動的に追加された要素にカーソルを合わせようとすると、$(this).addClass('btn-closed');機能しないことがわかりました。要素にすでに存在するクラスを照合してホバーしようとすると、正常に機能します(ただし、ロジックが原因で解決策としては機能しません)。

// funcao para acertar as classes dos botoes aberto fechado
 $j.get('/restaurante/hora', function(data) {
        $j('#now').val(data);
        // Box de Sugestoes
        $j("#products-grid-QD .btn-cart").each( function() {
            //alert($j(this).attr('tipo') + " " +  $j(this).attr('abre1') + " " + $j(this).attr('fecha1') + " " + $j(this).attr('abre2') + " " + $j(this).attr('fecha2') + " " + $j('#now').val())
            if (checkinrange($j(this).attr('tipo'), $j(this).attr('abre1'),$j(this).attr('fecha1'),$j(this).attr('abre2'),$j(this).attr('fecha2'),$j('#now').val())) {
                $j(this).removeClass('btn-fechado');
            } else {
                $j(this).addClass('btn-fechado');
                $j(this).removeAttr('onclick');
                $j(".commentBtn").text('Fechado');

            }

        });
    }); 


    $j(document).ready(function(){
        $j('.btn-fechado').hover(function() {               
           $j(this).next(".commentBtn").animate({opacity: "show"}, "slow");
         }, function() {
           $j(this).next(".commentBtn").animate({opacity: "hide"}, "fast");

         });
    });




<button type="button" onclick="btnComprar(<?php echo $_help['store_id']; ?>, '<?php echo $this->getAddToCartUrl($_product); ?>', '<?php echo $_help['nome'];?>')" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')" tipo="<?php echo $_help['tipo'];?>" abre1="<?php echo $_help['abre1'];?>" fecha1="<?php echo $_help['fecha1'];?>" abre2="<?php echo $_help['abre2'];?>" fecha2="<?php echo $_help['fecha2'];?>" >
                                    <span><span><?php echo $this->__('Add to Cart') ?></span></span>
                                </button>
                                <span class="commentBtn"></span>

手伝ってください。

4

4 に答える 4

2

あなたのコードはこれを行います:

  1. DOM の準備が整うのを待ちます
  2. クラスを持つすべての要素を選択する.btn-fechado
  3. それらをホバーイベントにバインドします。

クラスを割り当てるときにイベントをバインドするか、イベントにライブ バインディングを使用する必要があります。

クラス割り当て時のバインディング:

$j(this).addClass('btn-fechado')
  .hover(function() {
    $j(this).next(".commentBtn").animate({opacity: "show"}, "slow");
  }, function() {
    $j(this).next(".commentBtn").animate({opacity: "hide"}, "fast");
  });

ライブ バインディングの使用:

$j(document).on("mouseover", '.btn-fechado', function() {               
  $j(this).next(".commentBtn").animate({opacity: "show"}, "slow");
});
$j(document).on("mouseout", '.btn-fechado', function() {
  $j(this).next(".commentBtn").animate({opacity: "hide"}, "fast");
});

$j(document)小さい容器に交換できます。

于 2012-11-22T12:47:50.633 に答える
0

ボタン自体にIDを指定してから使用することで、これを回避できます

$('#yourButton').addClass('yourClass');
$('#yourButton').on('hover', function() {});
于 2012-11-22T12:48:39.137 に答える
0

委任を使用する必要があります。

$j(document).on('hover','.btn-fechado',function() {
 ....
}
于 2012-11-22T12:49:29.877 に答える
0

で試しhoverてくださいjquery live

$j(document).ready(function(){
    $j('.btn-fechado').live('hover',function() {               
       $j(this).next(".commentBtn").animate({opacity: "show"}, "slow");
     }, function() {
       $j(this).next(".commentBtn").animate({opacity: "hide"}, "fast");

     });
});

jquery ライブ メソッドでは、dom をバインド/バインド解除していません。詳細については、をご覧ください。

http://api.jquery.com/live/

于 2012-11-22T12:50:10.457 に答える