简体   繁体   English

Javascript-当单击按钮时,第二次单击后切换CSS属性

[英]Javascript - When a button is clicked the CSS property toggle after second click

I am working on a simple Play and Pause button code with Javascript. 我正在使用Javascript开发简单的播放和暂停按钮代码。 The script is toggling the CSS property; 该脚本正在切换CSS属性。 however, after a delay. 但是,在延迟之后。 At the moment, the toggle happens on second click. 此刻,切换会在第二次点击时发生。 Not sure what the issue is. 不知道是什么问题。

  $(document).click(function () { $("#startClock").click(function () { $("#startClock").css("display", "none"); $("#stopClock").css("display", "block"); }); $("#stopClock").click(function () { $("#stopClock").css("display", "none"); $("#startClock").css("display", "block"); }); }); 
 #stopClock { display: none; } #startClock { display: block; } 
 <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js?ver=4.1'></script> <button id=startClock >Start</button> <button id=stopClock >Pause</button> <br/> 

Instead of $(document).click go for $(document).ready 代替$(document).click$(document).ready

 $(document).ready(function () { $("#startClock").click(function () { $("#startClock").css("display", "none"); $("#stopClock").css("display", "block"); }); $("#stopClock").click(function () { $("#stopClock").css("display", "none"); $("#startClock").css("display", "block"); }); }); 
 #stopClock { display: none; } #startClock { display: block; } 
 <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js?ver=4.1'></script> <button id=startClock >Start</button> <button id=stopClock >Pause</button> <br/> 

It was happening because on first click which was getting listen by document ; 之所以发生这是因为第一次clickdocument监听; the click event handler were getting attached to your button . click事件处理程序已附加到您的button Hence needed 2 clicks for the CSS animation. 因此需要2次单击才能获得CSS动画。

  $(document).ready(function() { $("#startClock").click(function() { $("#startClock").css("display", "none"); $("#stopClock").css("display", "block"); }); $("#stopClock").click(function() { $("#stopClock").css("display", "none"); $("#startClock").css("display", "block"); }); }); 
 #stopClock { display: none; } #startClock { display: block; } 
 <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js?ver=4.1'></script> <button id=startClock >Start</button> <button id=stopClock >Pause</button> <br/> 

Because at first you first time clicked it twice cause of click inside of click event. 因为一开始您第一次单击它两次,所以单击事件内部会导致单击。 You clicked document and after clicked button. 您单击了文档,然后单击了按钮。

what if you change 如果你改变怎么办

$(document).click(function() {

to

$(document).ready(function() {

I can't see the context but it looks like you have two nested click listeners. 我看不到上下文,但看起来您有两个嵌套的单击侦听器。

Issue is you have wrapped code inside $(document).click It should be $(document).ready() 问题是您将代码包装在$(document).click 。应该是$(document).ready()

Sample 样品

 $(document).ready(function() { $("#startClock").click(function() { $("#startClock").css("display", "none"); $("#stopClock").css("display", "block"); }); $("#stopClock").click(function() { $("#stopClock").css("display", "none"); $("#startClock").css("display", "block"); }); }); 
 #stopClock { display: none; } #startClock { display: block; } 
 <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js?ver=4.1'></script> <button id=startClock>Start</button> <button id=stopClock>Pause</button> <br/> 

You should avoid using style attribute. 您应该避免使用样式属性。 Rather you should use class . 相反,您应该使用class If you switch to class approach, you can use, toggleClass or addClass/removeClass functions to update visibility. 如果切换到class方法,则可以使用toggleClassaddClass/removeClass函数来更新可见性。

Sample 样品

 $(document).ready(function() { $("#startClock, #stopClock").click(function() { $("#startClock").toggleClass("hide"); $("#stopClock").toggleClass("hide"); }); }); 
 .hide{ display:none } 
 <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js?ver=4.1'></script> <button id="startClock">Start</button> <button id="stopClock" class="hide">Pause</button> <br/> 

Try this one, 试试这个

Using preventDefault you can do it. 使用preventDefault可以做到。

$(document).ready(function () {
    $("#startClock").click(function (e) {
        e.preventDefault();
        $("#startClock").css("display", "none");
        $("#stopClock").css("display", "block");
    });
    $("#stopClock").click(function (e) {
        e.preventDefault();
        $("#stopClock").css("display", "none");
        $("#startClock").css("display", "block");
    });
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM