首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mousedown不工作

mousedown不工作
EN

Stack Overflow用户
提问于 2012-05-27 16:47:21
回答 2查看 1.9K关注 0票数 1

使用下面的代码,当我单击并按住bid-up按钮时,它只会遍历代码一次,并且我必须再次单击它才能工作。它应该做的是重复代码,直到鼠标向上或鼠标离开。我做错什么了?

代码语言:javascript
复制
$('.bid-up').live('mousedown',function() {

    var button = $(this);
    timeoutId = setTimeout(function(){

        var number = button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val();
        var newnumber = number.split('.');
        var on = button.attr('data-on');

        button.siblings('#bid-down').attr('data-on','1');

        if(newnumber[1]<9) {
            var first = newnumber[0];
            var second = parseInt(newnumber[1])+1;
        }

        if(newnumber[1]==9) {
            var first = parseInt(newnumber[0])+1;
            var second = 0;
        }

        var finalnumber = first+'.'+second;
        button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(finalnumber);

    }, 20);

}).bind('mouseup mouseleave', function() {
    clearTimeout(timeoutId);
});
EN

回答 2

Stack Overflow用户

发布于 2012-05-27 16:52:19

解决方案:使用setIntervalclearInterval而不是超时,因为setTimeout只执行闭包函数一次,或者在闭包函数中执行setTimeout

在函数本身中使用setTimeout的示例:

代码语言:javascript
复制
$('.bid-up').live('mousedown',function() {

    var button = $(this);


    function asd(){

        var number = button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val();
        var newnumber = number.split('.');
        var on = button.attr('data-on');

        button.siblings('#bid-down').attr('data-on','1');

        if(newnumber[1]<9) {
        var first = newnumber[0];
        var second = parseInt(newnumber[1])+1;
        }

        if(newnumber[1]==9) {
        var first = parseInt(newnumber[0])+1;
        var second = 0;
        }

        var finalnumber = first+'.'+second;
        button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(finalnumber);

        timeoutId = setTimeout(asd, 20);
    }

    timeoutId = setTimeout(asd, 20);

}).bind('mouseup mouseleave', function() {
    clearTimeout(timeoutId);
});

使用setIntervaldata存储interval id的示例。

代码语言:javascript
复制
$('.bid-up').live('mousedown',function() {

    var button = $(this);

    button.data('interval', setInterval(function (){

        var number = button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val();
        var newnumber = number.split('.');
        var on = button.attr('data-on');

        button.siblings('#bid-down').attr('data-on','1');

        if(newnumber[1]<9) {
        var first = newnumber[0];
        var second = parseInt(newnumber[1])+1;
        }

        if(newnumber[1]==9) {
        var first = parseInt(newnumber[0])+1;
        var second = 0;
        }

        var finalnumber = first+'.'+second;
        button.parent('div').siblings('#bid-child-container-2').find('#bid-price').val(finalnumber);
    }, 20));

}).bind('mouseup mouseleave', function() {
    clearInterval(button.data('interval'));
});
票数 2
EN

Stack Overflow用户

发布于 2012-05-27 16:59:37

试试这个:http://jsfiddle.net/R85Xb/

代码语言:javascript
复制
var timeoutId;
function x()
{
        $("#bids").append("x");
        timeoutId = setTimeout(x, 200);
}

$('.bid-up').live('mousedown', function() {

    var button = $(this);
    timeoutId = setTimeout(x, 200);

}).bind('mouseup mouseleave', function() {
    //alert('clear');
    clearTimeout(timeoutId);
});​


<div class="bid-up">here</div>
<div id="bids"></div>​
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10772751

复制
相关文章

相似问题

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