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、何が問題なのかを判断するのは困難ですが、最も可能性の高い原因は、 の代わりに を比較に使用していること=====です。を使用すると、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 に答える