2010-12-07 10 views
0

私のページ上の要素で奇妙なonClick動作の問題を解決することが困難です。onClickでの散発的ループタイプの動作

基本的には、ページ上に複数のスパンがあります。クリックすると、要件に応じてレコードのステータスが変更されます。

DBの更新はAjax経由で行われるため、ユーザーがレコードをアクティブから無効に切り替えるとonClickイベントハンドラが動的に変更され、onClickはsetRevoked()というメソッドを呼び出すように変更されます。 setActive()。

スパンコンテナの例は次のとおりです。

function setActive(tierId) { 
     if (tierId) { 
      console.log('active' + tierId); 
      $.post("admin.php?module=clients&action=tier_activate", {'tierId':tierId,'clientId':1234> }, function(data) { 
       clearMessages(); 
       var obj = jQuery.parseJSON(data); 
       if(obj.message == 'success') { 
        var js = "setRevoke("+tierId+"); return false;"; 
        var newClick = new Function(js); 
        $('#tier_' + tierId).attr({title: 'Revoke', onClick: ''}).click(newClick).text('Revoke'); 
        addJavascriptMessage(obj.reason, "success"); 
       } 
       else if (obj.message == 'failed') { 
        addJavascriptMessage(obj.reason, "error"); 
       } 
      }); 
     } 
     else { 
      addJavascriptMessage('A valid status must be selected', "error"); 
     } 
    } 
} 

私が遭遇してる問題はonclickのがループに入ったいくつかの理由である:

私のsetActive()メソッドを有効にしますonclickを押すほど、DBへの呼び出しが増え、最終的にはブラウザが多すぎてブラウザがクラッシュしなくなります。

実際にはループが含まれていないので、非常に奇妙です。これが私を困惑させるものです。

答えて

0

既存のクリックイベントをクリアしようとすると、onClick属性を ''(空白)に設定しているようです。これは動作しません、unbind以前のjQueryイベントが必要です。

+0

新しいイベントをバインドする前に、以前のクリックイベントをバインド解除する必要がありますか?これは、複数のonClicksが存在するためにループするように見える理由を説明します。 –

+0

私はonClick = ''を維持しなければならず、これに先立って$( '#tier_' + tierId).unbind( 'click');それが働くために。 –

0

いつあなたはonclickのメソッドバインディングを変更していますか?あなたはonclick..aチェックボックスをどのようにコントロールしていますか?はい、もしあなたが間違ってonClickを自動的に引き起こす可能性のあるメソッドのどこかで.checkedをやっていますか?

関連する問題