我在根据来自其他属性字段的选择隐藏属性字段时遇到问题。
由于缺乏这样做,我想在我的页脚块中添加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
答案 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()
调用确保代码仅在最初添加内容时运行,而不是在添加其他内容时运行。