2016-05-04 11 views
0

私はJavaScriptでいくつかの機能を持つクラスを持っています。 2人はボタンのテキストとそのonclickイベントを変更することになっています。私は自分でそれをやろうとしましたが、私は循環参照問題に挑戦しています。javascriptのクリックイベントを使用した循環参照

はクラスの私の機能に従ってください...私は私が「でpreventDefault()」のようなものを使用しなければならないと考えているが、私はそれを使用することができませんでした:

this.add_person = function(row, btn) { 
    $(btn).parent().parent().addClass("selected_row"); 
    $(btn).text("-"); 
    $(btn).attr("onclick", function(e) { 
     //e.preventDefault(); 
     $.adfg.tabs.del_person(row, btn); 
    }); 
} 
this.del_person = function(row, btn) { 
    $(btn).parent().parent().removeClass("selected_row"); 
    $(btn).text("+"); 
    $(btn).attr("onclick", function() { 
     //$.adfg.tabs.add_person(row, btn); it starts to call the other function and the circular reference to the functions starts... 
    }); 
} 

そして、ここではボタンが

です
'<a class="btn btn-info btn-sm" onclick=$.adfg.tabs.add_person(' + meta.row + ',this)>' + '+' + '</a>' 
+0

は、なぜあなたはあなたのイベントをバインドするために)(.ATTR使用していますか? – n00dl3

+0

なぜイベントハンドラを接続したり切り離したりする代わりにonclick属性を変更していますか? – SpoonMeiser

+0

これは、1つのAPIでレンダリングされていたため、リンクにイベントを追加する方法がわかりませんでした。だから、私はonclickイベントを追加したので、私はそれを変更しようとしました。しかし、皆さんが言っているように、それは悪い考えでした。私はJSには新しく、まだ良い方法と悪い方法を見つけようとしています。フィードバックありがとう – mk2

答えて

0

なぜこのようなことを試してみませんか?

clickイベントを変更し、ちょうど呼び出しごとに状態を確認すると混乱する必要はありませんが...

'<a class="btn btn-info btn-sm" onclick=$.adfg.tabs.add_delete_person(' + meta.row + ',this)>' + '+' + '</a>' 

this.add_delete_person = function(row, btn) 
{ 
    // if the text is equal to a minus then we're deleting 
    if($(btn).text() == "-") 
    { 
     $(btn).parent().parent().removeClass("selected_row"); 
     $(btn).text("+"); 
    } 
    // else we're adding 
    else 
    { 
     $(btn).parent().parent().addClass("selected_row"); 
     $(btn).text("-"); 
    } 
}; 
+1

状態を保存するために、ボタンのテキストコンテンツ以外のものを使用することをお勧めします。たとえば、クラスを使用できます。あるいは、おそらく 'btn.data(" state ")'です。 –

+0

なぜ、@NiettheDarkAbsol? – mk2

+0

ボタンのテキストを変更するとどうなりますか?次に、すべてのコードを検索して、そこに壊れていないことを確認する必要があります。 –

関連する問題