SlideDown工作,SlideUp拒绝

时间:2013-07-22 02:23:35

标签: jquery drupal-7 ubercart

我在根据来自其他属性字段的选择隐藏属性字段时遇到问题。

由于缺乏这样做,我想在我的页脚块中添加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 wich提供折扣,而不是将其运送给客户。

这一切都像它应该工作,每当我在字段5中选择值15时,字段4弹出并且我能够选择其中的任何内容,但是,当我在字段5中选择值14时,字段4不会返回躲藏起来。

基本上我想要实现的是拥有2个克隆字段用于发送或发送,其中1个具有折扣,用于选择打打而不是单个产品。这可以防止人们订购1件单品,同时将表格4放到价值13并获得相同的折扣,就像他们选择来自商店并且没有将它们运到他们那里一样,这就是折扣就是这样。我希望这是有道理的。

有人可以解释为什么这不应该像它应该的那样工作吗?为什么它不会重新隐藏?我错过了什么吗?我并没有真正进入jquery,所以它可能只是一个非常明显的东西。如果有更容易的替代方案,那么我可以提出建议。

提前致谢,

凯文

更新: http://jsfiddle.net/zhmSS/ 小提琴似乎像魅力一样...... 但是在我的产品页面上它仍然失败,即使

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

更改为:

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

必须打破它吗? 我尝试在Drupal上使用jQuery更新并选择jQuery v1.5,v1.7和v1.8,但它们都没有区别。

相关网页: http://italvin.arclyse.net/?q=producten&w=Rode%20Wijn&s=All&wh=All&d=All

1 个答案:

答案 0 :(得分:0)

如果这是在Drupal中,你必须以不同的方式构建你的jquery。 Drupal使用行为系统,确保只要通过ajax添加内容,您的javascript代码就会运行。现在,您的jquery函数将永远不会运行,因为在您的表单完全加载之前文档已“准备好”。

以下是working with javascript in Drupal

的参考资料

这是在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()调用确保代码仅在最初添加内容时运行,而不是在添加其他内容时运行。