【问题标题】:HTML jquery buttons sometimes don't reactHTML jquery 按钮有时没有反应
【发布时间】:2012-12-26 01:18:57
【问题描述】:

您好,我有几个简单的按钮,有时没有反应。它很少发生,但我仍然不喜欢它。如果您非常快速地单击或非常快速地更改导航,它会发生更多。这是我为他们准备的代码:

$(document).ready(function () { 
    $('[id*=txt]').hide();
    $('[id*=hd]').hide();                   
    $('[id*=home]').show();
    $('#btnhome').css('background-color',"#555");
    $('#btnhome').css('opacity',"0.4");

    $('.button').click(function (){
        $('[id*=txt]').hide();
        $('[id*=hd]').hide();
        $('.button').css('background',"transparent");
        $('.button').css('opacity',"1");
        $(this).css('background-color',"#555");
        $(this).css('opacity',"0.4");
   });          

    $('#btnhome').click(function () {   
        $('[id*=home]').show();             
    });     

    $('#btnabout').click(function () {              
        $('[id*=about]').show();        
    });    

    $('#btncontact').click(function () {        
        $('[id*=contact]').show();  
    });
});

它们仅用于显示和隐藏文本,并且在单击时还会更改颜色不透明度等。当他们没有反应时,什么也没有发生,就好像我没有定义任何点击函数一样。

DEMO

^这是我基本上使用的,尝试以随机顺序击中它们并以快速方式切换(如果你做得快,会发生更多)。你会看到有时他们没有反应。它有点难以注意到,因为它很少发生(有时更频繁),所以它一开始可能不会发生,但它肯定会发生。所以多试几次,你就会明白我在说什么了。你做的越快越随意,它就会发生的越多。

【问题讨论】:

    标签: jquery html function button


    【解决方案1】:

    在玩过您的演示后,我注意到问题是在单击每个按钮上的某个位置时发生的,而不是通过随机单击或以特定速度单击它们。最佳位置通常位于按钮文本边缘的右侧边距处。

    我发现从 CSS 中删除 .button:active{} 伪类可以解决问题,所以我的猜测是 CSS 中按钮位置的移动会干扰点击事件。我的建议是将移除的 CSS 样式合并到 click(或 mousedown)事件本身而不是 :active 伪类中。

    【讨论】:

    • 你是对的!我只想说:我注意到当按钮没有反应时,如果你再次点击确切的像素,它不会工作,直到你点击它的另一个位置。因此,如果你一遍又一遍地点击同一个像素,它不会起作用,直到你移动鼠标并点击它,但点击其他像素/位置。有什么办法只能移动按钮上的文本而不是整个按钮?
    • 看看这个 jfiddle:jsfiddle.net/mMF5r/8 我将你在 active psuedoclass 中的所有样式都移到了 jquery mousedown 事件中。您还必须实现mouseup 事件才能在点击后删除这些样式。
    • 该死的,它仍然会发生。 'mousedown' 没有修复它。
    • 问题出在.button:active { position:relative; top: 2px; left:2px; } 不是伪类,而是它里面的更多内容。问题本身是顶部和左侧定位样式...
    • 我尝试了一些其他方法来更改单击按钮时的位置,它们似乎都有相同的问题。与将按钮从其下方移出有关,但我真的不知道到底发生了什么。我的建议是尝试通过更改边框样式或使用背景图像并更改它来达到相同的效果。
    【解决方案2】:

    我不知道具体原因,但我想问题是因为当你像这样使用选择器时:

     $('[id*=contact]').myFunction();
    

    JQuery 它会花费更多时间来找到正确的选择器,并且如果在下次单击之前没有找到它,则不会做出反应。 在一个复杂的页面中,充满了 div 和信息,可能会出现故障。

    对此的支持,我尝试仅更改 onclick 回调,它似乎效果更好:http://jsfiddle.net/mMF5r/7/

    【讨论】:

    • 不幸的是,对我来说它仍然和以前一样。当按钮没有反应时,如果你再次点击确切的像素,它不会工作,直到你点击它的另一个位置。因此,如果您一遍又一遍地点击同一个像素,它不会起作用,直到您移动鼠标并点击它,但点击其他像素/位置。
    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 2012-08-26
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2021-06-04
    相关资源
    最近更新 更多