1

jqueryの星評価を実装しました。ユーザーがそのレートを追加するとき、私はそれをデータベースに保存し、星の評価を無効にします。
ただし、ユーザーがスターをもう一度クリックした場合に無効にした後、もう一度js関数を呼び出して、スコアをデータベースに保存しようとします。

<input name="rating" type="radio" class="star" value="3" />
...
$('.star').click(function(event) {
        $.ajax({
                type: "POST",
                url: '@Url.Action("Rate", "Rating")',
                data: $("#rate").serialize(),
                success: function(response) {
                    alert('Your rating has been recorded');   
                    $('.star').rating('disable', true);
                },
                error: function(response) {
                alert('There was an error.');
              }
            });
        });
4

1 に答える 1

4

off()ajax呼び出しの後に(を使用して)クリックイベントのバインドを解除できます

 $('.star').click(function(event) {
     var $this = $(this);
     ...
     success: function(response) {
         alert('Your rating has been recorded');   
         $this.off('click');
     },

 });

複数の.star要素がある可能性があるため、クリックしたリンクにのみアタッチされているハンドラーのバインドを解除する必要があります。

もう1つの簡単な可能性は、次.one()のようにを使用してハンドラーをバインドすることです。

 $('.star').one('click', function(event) {
     var $this = $(this);
     ...
     success: function(response) {
         alert('Your rating has been recorded');   

     },

 });

.starこれにより、異なる要素ごとに1回のクリックイベントのみが許可されます

とにかく、サーバー側でもこのようなチェックをすることを強くお勧めします。サーバー上のデータを変更する可能性のあるアクションをクライアント側に依存しないでください

于 2012-09-03T16:24:47.423 に答える