1

A)我有一个很好的第一个功能:

  if(onlyUs == '1' && idUser == '0'){
            obj.after(jQuery('<div />').css({'clear':'both'}).addClass('kklike-msg').text('Only registered users can vote.'));
            setTimeout(function(){
                jQuery('.kklike-msg').fadeOut('normal');
            },3000);
            return false;
        }

B)所以我认为我可以做以下事情:

        if(idUser == '0'){
                if(action == 'like'){
                        var ajaxAction = 'add_like';
                }else{
                        var ajaxAction = 'remove_like';
                }
        }else{
            if(action == 'like'){
                        var ajaxAction = 'add_like';
                        window.open('http://mywebsite.com/like')
                }else{
                        var ajaxAction = 'remove_like';
                        window.open('http://mywebsite.com/remove')
                }
        }

C)知道原始功能很简单(效果很好):

if(action == 'like'){
                        var ajaxAction = 'add_like';
                }else{
                        var ajaxAction = 'remove_like';
                }

但是 B) 不起作用。在这两种情况下(登录与否),新窗口都会打开。你有解决方案吗 ?

4

1 回答 1

6

在不知道 的类型的情况下idUser,很难说出问题所在,但最可能的罪魁祸首是使用==for comparison 而不是===. JavaScript 会在使用 时将被比较的变量转换为相似的类型==,这可能会在您的情况下导致一些非常不可预测的结果。

我建议您编写如下代码。如果这仍然无法按您的预期工作,您应该调查idUser实际值是多少。它可能不是string导致您的问题的原因。

if (idUser === '0') {
    if(action === 'like') {
        var ajaxAction = 'add_like';
    } else {
        var ajaxAction = 'remove_like';
    }
} else {
    if (action === 'like') {
        var ajaxAction = 'add_like';
        window.open('http://mywebsite.com/like');
    } else {
        var ajaxAction = 'remove_like';
        window.open('http://mywebsite.com/remove');
    }
}

有关为什么应该使用 的非常简单的示例===,请参阅此博客文章:

http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html

于 2013-02-10T16:15:36.003 回答