【问题标题】:SlideDown working, SlideUp refusing to go back into hidingSlideDown 工作,SlideUp 拒绝重新隐藏
【发布时间】:2013-07-20 16:26:03
【问题描述】:

我在隐藏基于从另一个属性字段中选择的属性字段时遇到问题。

由于缺乏这样做更容易,我想在我的页脚块中添加 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/ 小提琴似乎很有魅力.. 但是在我的产品页面上它一直失败,即使

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

【问题讨论】:

  • 这是一个拼写错误if ($(#edit-attributes-5),因为它应该是if ($('#edit-attributes-5')。您也可以将其替换为$(this).val()
  • 如果你发布一个 jsFiddle 演示也会有所帮助。
  • 嗨奥马尔,我忘了提到我都试过了,它现在的样子让它也滑下来了,它以前也是“这个”,但因为它没有用,我尝试了其他方法.有趣的是,当我在小提琴中尝试这些代码并将 if ($(#edit-attributes-5) 更改为此时,它就像一个魅力,但是,在它需要工作的页面上却没有。
  • @Shivam : jsfiddle.net/zhmSS 似乎工作得很好,但在我的产品页面上却不行:italvin.arclyse.net/…
  • 说实话,很难理解您要完成的工作。您的问题是“SlideDown 工作,SlideUp 拒绝”,您的目标是让 slideUp 工作吗?除非样式不同,否则 SlideUp 无法与选择元素一起正常工作。我可以建议使用fadeIn() 和fadeOut() 吗? jsFiddle 更新:jsfiddle.net/zhmSS/1

标签: jquery drupal-7 ubercart


【解决方案1】:

如果这是在 Drupal 中,您必须以不同的方式构建您的 jquery。 Drupal 使用一个行为系统来确保您的 javascript 代码在通过 ajax 添加内容时运行。现在,您的 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() 调用确保代码仅在最初添加内容时运行,而不是在添加其他内容时运行。

【讨论】:

  • 感谢您解释并提供示例,但是,当我将此方法添加到页面时,我看到 1 件事表明确实出了问题,即它现在实际上向下滑动喜欢它应该有一个整洁的效果,但是当值回到 14 时它仍然不会隐藏选择列表。我现在所做的是用你的替换我的 jquery 代码块,其余的保持原样,但仍然不行.看到您似乎对 drupal 本身了解得更多,您是否知道可能有什么东西阻塞了整个 jquery?
  • 我认为发生的事情是,当您更改 Afname 选择时,整个表单会通过 ajax 重新加载,这意味着 #edit-attributes-5 已被删除和替换,从而删除了其 change() 事件处理程序,所以它会第一次触发,但不会触发第二次。要测试是否是这种情况,请将alert()console.log() 调用添加到更改处理程序,并查看是否正在调用它。通常,您不会将 drupal 行为添加到视图的标题中,而是将其放入主题加载的 .js 文件中(通常在您的 theme.info 文件中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多