2016-05-04 6 views
0

У меня есть класс в JavaScript, который имеет некоторые функции. Два из них должны изменить текст кнопки и ее событие onclick. Я попытался сделать это сам, но я столкнулся с круглой проблемой. Я считаю, что я должен использовать что-то вроде «preventDefault()», но я не мог использовать его ...Циркулярная ссылка с использованием события javascript click

Следуйте свои функции класса:

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

Ну, я не знал, как добавить событие в ссылку, потому что это был рендеринг одним 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

Что делать, если вы решили изменить текст на кнопке? Тогда вам придется искать через весь код, чтобы убедиться, что он не сломается. –

Смежные вопросы