0

好的,所以我有以下 HTML:

<a href="#" onclick="bump_add('.$fetch['photo_id'].')">
    <img id="bump_img" src="img/bump.png"/>
</a>

目前我的 Javascript/Ajax 看起来像这样:

function bump_add(photo_id) {
    $.post('php/bump_add.php', {photo_id:photo_id}, function(data){
        if (data='success') { //Handled by PHP
            bump_get(photo_id);
            toggle_visibility('bump_img')
        } else {
            alert(data);
        }
    });
}

function bump_get(photo_id) {
    $.post('php/bump_get.php', {photo_id:photo_id}, function(data){
        $('#photo_'+photo_id+'_bumps').text(data); //Handled by PHP
    });
}

function toggle_visibility(id) {
    var e = document.getElementById(id);
    if(e.style.display == 'block') {
        e.style.display = 'none';
    }
}

我不擅长 Javascript,所以我不完全确定如何实现我的目标。

我想要做的是在“onclick”事件(有效)上运行bump_add()函数,然后运行bump_get()函数(也有效)。但是为了最终运行 toggle_visibility() 函数,这个位不起作用。

关于我做错了什么的任何想法?toggle_visibility() 的 Javascript 函数是否不正确,或者我只是使用不正确?它的目的是隐藏带有'bump_img' id 的img。

4

2 回答 2

1

查看queue,其工作方式类似于他的:

var div = $("div");

function runIt() {
  div.show("slow");
  div.animate({left:'+=200'},2000);
  div.slideToggle(1000);
  div.slideToggle("fast");
  div.animate({left:'-=200'},1500);
  div.hide("slow");
  div.show(1200);
  div.slideUp("normal", runIt);
}

function showIt() {
  var n = div.queue("fx");
  $("span").text( n.length );
  setTimeout(showIt, 100);
}

runIt();
showIt();

这是一个演示

于 2013-06-21T19:44:57.963 回答
0

此外,您应该使用承诺,例如:

function bump_add(photo_id) {
        $.post('php/bump_add.php', {photo_id:photo_id}, function(data){
            if (data='success') { //Handled by PHP
                bump_get(photo_id).done(function(){
                    toggle_visibility('bump_img');
                });
            } else {
                alert(data);
            }
        });
    }

    function bump_get(photo_id) {
        var promise = $.post('php/bump_get.php', {photo_id:photo_id}, function(data){
            $('#photo_'+photo_id+'_bumps').text(data); //Handled by PHP
        });
        return promise;
    }

    function toggle_visibility(id) {
        $('#' + id).slideToggle(); // just an example.
    }

这个想法是 bump_get 将返回一个承诺,你可以在你的 bump_add 函数中使用它。

请参阅:jQuery deferreds and promises - .then() vs .done()http://api.jquery.com/promise/以获取更多信息
此外,由于您使用 jquery,请在您的toggle_visibility函数中使用它,请参阅方式我更新了它。

于 2013-06-21T19:46:53.040 回答