【问题标题】:jquery delay won't workjquery延迟不起作用
【发布时间】:2012-12-03 01:18:02
【问题描述】:

我正在尝试延迟 jQuery 序列,但拒绝工作。

var old = $('.likes' + id).text();
$('.likes' + id).text("You've already voted").delay(3000).text(old); 

现在,旧文本会立即输入,而不会显示“您已经投票”。

有什么建议吗?

编辑:

根据要求:

HTML:

<li>
                            <h2><a href="?page=dub&id=%%DUB_ID%%">%%DUB_TITLE%%</a></h2>
                            <div class="dub">
                                <iframe width="560" height="315" src="http://www.youtube.com/embed/%%YOUTUBE_ID%%?hd=1" frameborder="0" allowfullscreen></iframe>
                                <div id="conten_wrapper">

                                    <div id="conten_meta">
                                        <p> Posted by: <a href="?page=profile&id=%%USER_ID%%">%%USERNAME%%</a><br />
                                            Likes: <span class="likes%%DUB_ID%%">%%LIKES%%</span><br />
                                            Date posted: %%DATE%%
                                        </p>
                                    </div>

                                    <div id="conten_social">
                                        <a href="javascript:void(0);" onclick="javascript:makeRequest(\'like\', %%DUB_ID%%)" class="likebtn">Like</a><a href="javascript:void(0);" onclick="javascript:makeRequest(\'dislike\', %%DUB_ID%%)" class="likebtn2">Dislike</a>
                                    </div>

                                </div>
                            </div>
                        </li>

js:

function makeRequest(name, id){
                $.ajax({
                   type: "GET",
                   url: "ajax.php",
                   data: "name=" + name + "&id=" + id,
                   success: function(msg){
                     var obj = jQuery.parseJSON(msg);
                     if(obj.status == "SUCCES"){
                        $('.likes' + id).html(parseInt($('.likes' + id).html(), 10)+1);
                     }else {
                        var old = $('.likes' + id).text();
                        $('.likes' + id).text("You've already voted").delay(3000).text(old);        
                     }
                   }
                 });
            }

【问题讨论】:

  • 愿意分享您的 HTML 吗?
  • delay() 只适用于 jQuery 的 FX 队列,也就是说它只适用于 jQuery 动画。要延迟文本插入,您必须使用超时,例如 -> FIDDLE ...另一方面,您做错了,因为只有在 ajax 调用成功时才会触发成功回调(惊喜),您可能需要使用错误(失败)回调,而不是成功回调中的 if 语句。
  • 类似这样的东西 -> FIDDLE 似乎更合适。

标签: jquery


【解决方案1】:

delay 仅影响 jQuery 的“队列效果”,例如 slideUpfadeIn,对于其他事情,您应该使用 JavaScript 的原生 setTimeout

【讨论】:

  • 我该怎么做?试过这个: $('.likes' + id).text("你已经投票了").setTimeout(function() { $('.likes' + id).text(old) }, 3000);
【解决方案2】:

使用 setTimeout 执行此操作的示例:http://jsfiddle.net/ShYVR/

var vote = $('.likes' + id)
var text = vote.text();
setTimeout(function() { vote.text(text); }, 3000);
vote.text("You've already voted");​

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多