2016-05-04 8 views
0

Ich habe eine Klasse in JavaScript, die einige Funktionen hat. Zwei von ihnen sollen den Text einer Schaltfläche und ihres Onclick-Ereignisses ändern. Ich habe versucht, es selbst zu tun, aber ich stoße auf ein zirkuläres Referenzproblem. Ich glaube, ich habe etwas zu verwenden, wie „prevent()“, aber ich konnte es nicht verwenden ...Circular Referenz mit Javascript klicken Ereignis

Folgen Sie meine Funktionen der Klasse:

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... 
    }); 
} 

Und hier ist die Taste

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

Warum verwenden Sie .attr() Ihre Veranstaltungen zu binden? – n00dl3

+0

Warum ändern Sie das Onclick-Attribut, anstatt Event-Handler anzuhängen und abzutrennen? – SpoonMeiser

+0

Nun, ich wusste nicht, wie man dem Link ein Ereignis hinzufügt, weil es von einer API gerendert wurde. Also habe ich ein onclick-Ereignis hinzugefügt und deshalb habe ich versucht, es zu ändern. Aber wie ihr sagt, scheint es eine schlechte Idee zu sein. Ich bin neu in JS und ich versuche immer noch, die guten und schlechten Ansätze herauszufinden. Danke für die Rückmeldung – mk2

Antwort

0

Warum nicht so etwas versuchen?

Chaos Keine Notwendigkeit, die click Veranstaltung mit wechselnden und prüfen nur den Zustand bei jedem Aufruf ...

'<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

Ich würde empfehlen, etwas anderes als den Textinhalt der Schaltfläche zu verwenden, um den Status zu speichern. Zum Beispiel kann eine Klasse verwendet werden. Oder vielleicht 'btn.data (" state ")'. –

+0

Warum, @NiettheDarkAbsol? – mk2

+0

Was ist, wenn Sie den Text auf der Schaltfläche ändern möchten? Dann müssten Sie den gesamten Code durchsuchen, um sicherzustellen, dass er dort nicht bricht. –