首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改css onclick/unclick

更改css onclick/unclick
EN

Stack Overflow用户
提问于 2012-12-20 02:10:57
回答 3查看 1.7K关注 0票数 2

尝试通过单击/取消单击另一个DIV来更改DIV的页边距。

现在就有这个:

代码语言:javascript
复制
$(document).ready(function(){
    $(".model_drop_pane").hide();
    $(".show-hide").click(function() {
        if ($("#body_machine_novideo").css('margin-top', '50px')) {
            $("#body_machine_novideo").css('margin-top', '300px');
            $(".model_drop_pane").slideToggle();
      } else {
            $("#body_machine_novideo").css('margin-top', '50px');
            $(".model_drop_pane").slideToggle();
    }
    });
});

这个想法是:当点击.show-hide DIV时,#body_machine_novideo DIV将其margin-top从50像素更改为300px,同时.model_drop_pane DIV也被切换。这部分起作用了。

问题:在第二次点击.show-hide DIV (“取消点击”)时,.model_drop_pane DIV会正常切换,但是#body_machine_novideo DIV的边距值不会重置回50px,而是保持在300px。

A working demo of the problem can be found here。单击徽标下方的Equipment: Chemical Stand链接。

EN

回答 3

Stack Overflow用户

发布于 2012-12-20 02:14:49

您正在比较$("#body_machine_novideo").css('margin-top')的值,但您真正应该做的是使用.toggleClass()方法切换类。

您应该创建一个class来添加额外的边距。把表示问题留给CSS,把行为或交互性留给JavaScript。更好的是,如果将来需要更改margin-bottom的值,您只需更改样式表,JavaScript仍将按预期工作。

代码语言:javascript
复制
// JavaScript
$(".show-hide").click(function(event) {
    $("#body_machine_novideo").toggleClass('more');
    $(".model_drop_pane").slideToggle();
    event.preventDefault(); // Added: prevent the clicking event to execute normally
});

和你的CSS:

代码语言:javascript
复制
/* CSS */
#body_machine_novideo { margin-top:50px; }
#body_machine_novideo.more { margin-top:300px; }
票数 1
EN

Stack Overflow用户

发布于 2012-12-20 02:19:39

检查你的状态来改变你的视图,而不是检查你的视图来弄清楚你的状态。

也就是说,不要将css放在JS中。不要检查内联样式来查看是否设置了该样式,然后在repsonse中插入硬编码的css值。元素是否具有特定的类取决于您的状态。CSS只是以特定的方式呈现特定的类。

CSS

代码语言:javascript
复制
#body_machine_novideo {
  margin-top: 50px;
}

#body_machine_novideo.open {
  margin-top: 300px;
}

JS

代码语言:javascript
复制
$(document).ready(function(){
    $(".model_drop_pane").hide();
    $(".show-hide").click(function() {
        $("#body_machine_novideo").toggleClass('open');
        $(".model_drop_pane").slideToggle();
    });
});

看到那多干净了吗?

票数 1
EN

Stack Overflow用户

发布于 2012-12-20 02:14:38

更改if条件

代码语言:javascript
复制
if ($("#body_machine_novideo").css('margin-top', '50px'))
// This part is always true.
// You are not comparing the values in the first place 

代码语言:javascript
复制
if ( parseInt($("#body_machine_novideo").css('margin-top'),10) === 50)

代码语言:javascript
复制
if ( +$("#body_machine_novideo").css('margin-top') === 50)

此外,您似乎在控制台中有一个错误,由于该错误,代码的其余部分可能无法执行。

对象没有方法“fancybox”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13958479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档