2
<script type="text/javascript">
        function vote(element, val){
            prev_vote=0;
            vote = 100
            can_vote = element.find('.vote-permission').attr('value')
            alert(can_vote);
            if (can_vote=='yes'){
                if (prev_vote==0){ 
                    alert("previous vote is 0");
                    // user has not cast vote for image before
                    vote_score = vote + val;
                    element.find('.vote-count-post').text(vote_score);
                }
                else if (prev_vote != 0){
                    // user has cast a vote before
                    if (prev_vote == 1 && val == -1){
                        vote_score = vote - 2;
                        element.find('.vote-count-post').text(vote_score);
                    }
                    else if (prev_vote == -1 && val == 1){
                        vote_score = vote + 2;
                        element.find('.vote-count-post').text(vote_score);
                    }
                }
            }
        };

        $(document).on('click', '.votedown', function(e){
            alert($(e.target).prev().text());
            vote($(e.target).parent(), -1);
            alert('vote down is done');
            });

        $(document).on('click', '.voteup', function(e){
            $(e.target).css('background-position', '0 -222px');
            vote($(e.target).parent(), 1);
            alert('vote up is done');
            });
    </script>

上記の JavaScript 関数は、私が実装している上下投票システムの足場です。賛成票または反対票ボタンが初めてクリックされたとき、関数は関数が期待どおりに実行され、vote() が呼び出されますが、2 回目のクリックでは、vote() 関数は定義されていないと言われます。理由はありますか?

4

1 に答える 1

7

関数は自分自身を削除しています

vote = 100

voteスコープ外の変数の値を置き換えます (以前は関数でしたが、現在は数値です)。

キーワードで防ぐことができますが、var可読性が損なわれるため、同じ名前を 2 回使用しないでください。

于 2012-09-18T16:55:45.187 に答える