代码之家  ›  专栏  ›  技术社区  ›  Chris Bartow

使用jquery在几秒钟后更改输入按钮文本

  •  8
  • Chris Bartow  · 技术社区  · 15 年前

    我正在使用表单和jquery在网站上进行快速更改。我想将按钮文本更改为“已保存!”然后在几秒钟后将其更改回更新状态,以便用户可以再次更改该值。当然,他们可以点击现在的“拯救!”再扣一次,但看起来不好看。

    $("form.stock").submit(function(){
        // Example Post
        $.post($(this).attr('action'), { id: '123', stock: '1' });
        $(this).find(":submit").attr('value','Saved!');
        // This doesn't work, but is what I would like to do
        setTimeout($(this).find(":submit").attr('value','Update'), 2000);
        return false;
    });
    
    5 回复  |  直到 10 年前
        1
  •  13
  •   SolutionYogi Eric Lippert    15 年前

    setTimeout的第一个参数是函数。所以将代码包装在一个匿名函数中,这样就很好了。

    $("form.stock").submit(function(){
        // Example Post
        $.post($(this).attr('action'), { id: '123', stock: '1' });
        var submit = $(this).find(":submit").attr('value','Saved!'); //Creating closure for setTimeout function. 
        setTimeout(function() { $(submit).attr('value','Update') }, 2000);
        return false;
    });
    

    我现在无法测试此代码。如果不起作用,请告诉我。

    编辑: 正如Redsquare所建议的,从提交按钮本身创建闭包是有意义的。

        2
  •  6
  •   BenMorel lsalamon    10 年前

    如果它实际上是一个“按钮”标签,那么要更改它,您将使用它。

    $('#button_id').html('New Text');
    

    当然,如果您正在为该按钮执行此onclick,那么您可以很容易地将(此)作为对象传递到函数中,而将$(this).html(“new text”);作为替代。

    希望这能帮助别人。

        3
  •  2
  •   tvanfosson    15 年前

    我可能会建议使用不同的(我认为更好的)界面来提供反馈,而不是更改按钮的文本。你可以使用 jGrowl dialog 通过post方法的回调显示消息的小部件。

    $("form.stock").submit(function(){
        $.post(
            $(this).attr('action'),
            { id: '123', stock: '1' },
            function() { $.jGrowl("Your update was successfully saved."); }
        );
    });
    
        4
  •  0
  •   Peter    15 年前

    您可能希望将操作包装在一个函数中:

    setTimeout(function(){$(this).find(":submit").attr('value', 'Update')}, 2000);
    
        5
  •  0
  •   redsquare    15 年前
    $("form.stock").submit(function(){
        var $form = $(this);
        $.post( $form.attr('action'), { id: '123', stock: '1' } );
        var $submit = $form.find(":submit").attr('value','Saved!');
        window.setTimeout(function() {
             $submit.attr('value','Update') 
        }, 2000);
        return false;
    });