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;
}

很明显,两者都是谷歌关于滑动不起作用的一些发现的建议,我不确定它的作用,但无论如何它没有任何区别,至少隐藏在页面加载时确实有效。

这一点是也位于页脚块中的 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,即购买 1 打而不是 1 个单一产品时,它显示属性字段 4 能够选择值 13,从而为取货而不是运送给客户。

这一切都像它应该的那样工作,每当我在字段 5 中选择值 15 时,字段 4 就会弹出,我可以在其中选择任何内容,但是,当我在字段 5 中选择值 14 时,字段 4 不会重新隐藏。

基本上我想要实现的是拥有 2 个用于发送或运输的克隆字段,其中 1 个具有折扣以选择一打而不是单个产品。这是为了防止人们订购 1 件单品,同时将表格 4 设为 13 并获得相同的折扣,就好像他们选择来商店自己买一打而不是将其运送给他们一样,这就是折扣是所有关于。我希望这有任何意义。

任何人都可以阐明为什么这不能正常工作吗?为什么它不再躲藏起来?我在这里错过了什么吗?我不是很喜欢 jQuery,所以它可能只是很明显的东西。如果有更简单的选择,那么我愿意接受建议。

更新: http: //jsfiddle.net/zhmSS/fiddle 似乎很有魅力。但是在我的产品页面上它一直失败,即使

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 使用一个行为系统来确保您的 javascript 代码在通过 ajax 添加内容时运行。现在,您的 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 回答