0

別の属性フィールドからの選択に基づいて属性フィールドを非表示にするのに問題があります。

これを簡単に行う方法が不足しているため、フッター ブロックに jQuery コードを追加することを考えました。

現在の状況をできるだけ詳しく説明するように努めます。

現在、次のように生成されている選択フィールドがあります。

<select id="edit-attributes-4" class="form-select ajax-processed" name="attributes[4]">
<option selected="selected" value="12">
  Verzenden, €15.44
</option><option value="13">
  Ophalen, €8.03
</option></select>

この:

<select id="edit-attributes-5" class="form-select ajax-processed" name="attributes[5]">
<option selected="selected" value="14">
  1 Fles, €15.44
</option><option value="15">
  1 Doos, €92.64
</option></select>

フィールド edit-attribute-4 をページの読み込み時に非表示にしたいので、同じフッター ブロックにもある CSS コードにこれを追加しました。

#edit-attributes-4 {
     display:none;
     clear: both;
}

明確な両方は、スライドアップが機能しないことに関するいくつかの Google の調査結果からの提案でした。それが何をするのかはわかりませんが、とにかく違いはありませんでした。少なくとも非表示はページの読み込みで機能します。

このビットは、フッター ブロックにもある jQuery コードです。

 $(document).ready(function(){
     $("#edit-attributes-5").change(function(){

         if ($(#edit-attributes-5).val() == "15" ) {
             $("#edit-attributes-4").slideDown("fast")

         } else {
              $("#edit-attributes-4").slideUp("fast")
         }
     });
 });

基本的には、属性フィールド 5 が値 15 に変更されると、属性フィールド 5 が値 15 に変更されます。これは、1 つの製品ではなく 1 ダースを購入する場合に、値 13 を選択できるように属性フィールド 4 を示します。お客様に発送するのではなく、引き取ります。

これはすべて正常に機能し、フィールド 5 で値 15 を選択すると、フィールド 4 がポップアップ表示され、その中の任意のものを選択できますが、フィールド 5 で値 14 を選択すると、フィールド 4 は非表示に戻りません。

基本的にこれで達成したいのは、送信または配送用に 2 つのクローン フィールドを作成することです。そのうちの 1 つは、単一の製品ではなくダースを選択するための割引があります。これは、フォーム 4 を値 13 に設定して 1 つの製品を注文することを防止するためであり、店舗に来て自分で 12 個の製品を購入し、それを発送しないことを選択した場合と同じ割引が適用されます。がすべてです。これが意味をなすことを願っています。

なぜこれが本来のように機能しないのか、誰かが光を当てることができますか? なぜ隠れ家に戻らないのですか?ここで何か不足していますか?私は jQuery にはあまり興味がないので、本当に明白なことかもしれません。もっと簡単な代替案がある場合は、提案をお待ちしています。

更新: http://jsfiddle.net/zhmSS/ フィドルは魔法のように機能するようです..しかし、私の製品ページでは、いつでも失敗し続けます

if ($(#edit-attributes-5).val() == "15" ) {

は次のように変更されます。

if ($(this).val() == "15" ) {

何かがそれを壊しているに違いない?Drupal で jQuery update を使用してみて、jQuery v1.5、v1.7、および v1.8 を選択しましたが、どれも違いはありません。

問題のページ: http://italvin.arclyse.net/?q=producten&w=Rode%20Wijn&s=All&wh=All&d=All

4

1 に答える 1

0

これが Drupal の場合、jquery を少し異なる構造にする必要があります。Drupal は、コンテンツが ajax 経由で追加されるたびに JavaScript コードが実行されるようにする動作システムを使用します。現在、フォームが完全にロードされる前にドキュメントが「準備完了」しているため、jquery 関数は実行されません。

Drupal で JavaScript を操作するためのリファレンスは次のとおりです。

Drupal で動作をアタッチする一般的な方法を次に示します。

(function ($, Drupal, window, document, undefined) {

    Drupal.behaviors.selectionHandlers = {
        attach: function( context, settings ) {

             $("#edit-attributes-5").once("select-handler", function() {

                  $(this).change(function(){
                      if ($("#edit-attributes-5").val() == "15" ) {
                           $("#edit-attributes-4").slideDown("fast")
                      } else {
                           $("#edit-attributes-4").slideUp("fast")
                      }
                  });
             });
         }
     }

})(jQuery, Drupal, this, this.document);

動作として追加すると、「新しいコンテンツがページに追加されたときにこのコードを実行する」と書かれています。

このonce()呼び出しにより、他のコンテンツが追加されたときではなく、コンテンツが最初に追加されたときにのみコードが実行されることが保証されます。

于 2013-07-22T03:46:32.500 に答える