прочитайте окончательное редактирование решения
Я пытаюсь обновить функцию onclick ссылки, используя jquery.
пример лучше всего объяснить:
html
<a href='' id='one_click' onclick='do_things_here("fighter","bitter",2)'>first clicker</a>
<a href='' id='two_click' onclick='do_things_here("abc","xyz",1)'>second clicker</a>
js (что-то вроде этого - я не думаю, что это на самом деле правильно, логически говоря)
function do_thing_here(data, info, source){
*//things happen here*
$('#two_click').click(function() {
do_things_here(data,info,source)
return false;
});
}
Это не работает, когда он входит в рекурсивный цикл, так как do_things_here отключается при сбросе щелчка по значению two_click.
edit
Я попытался установить флаг сброса, чтобы предотвратить запуск do_things_here при переустановке onclick
function do_thing_here(data, info, source,reset){
if (reset){
return false;
}
*//things happen here*
$('#two_click').click(function() {
do_things_here(data,info,source,true)
return false;
});
}
, но это показалось хакером, и я не думаю, что это сработало, у меня все еще были проблемы- Я попробую сделать это снова и посмотрю, в чем проблема.
Я попытался отменить привязку и удалить атрибут / атрибут в попытке переназначить, как описано здесь
JavaScript:изменение значения onclick с или без jQuery
эти методы не работают во всех браузерах
- Использование jQuery
attr("onclick", js)
не работает сFirefox и IE6 / 7. - Использование setAttribute ("onclick", js) работает с Firefox иIE8, но не IE6 / 7.
- Использование
onclick = function() { return eval(js); }
не работает, потому что вы не можете использовать return - это код, переданный в eval ().
Я попытался очистить функцию onclick в html, чтобы по умолчанию ничего не устанавливалось, но это не имело никакого эффекта.
Я могу просто сбросить / перенастроить ссылку следующим образом
<span id='change_two'><a href='' id='two_click' onclick='do_things_here("abc","xyz",1)'>second clicker</a></span>
, а затем
function do_thing_here(data, info, source){
*//things happen here*
$('#change_two').html("<a href='' id='two_click' onclick='do_things_here('+data+','+info+','+soutce+')'>second clicker</a>");
}
или что-то подобное, но мне интересно, есть ли лучший, более чистый способ сделать это?
---- изменить: решение объяснено----
только для тех, кто гуглит на этой странице:
если вы установите onclick через html, вам нужно удалитьAttr ($(this).removeAttr('onclick')
)
, еслиВы устанавливаете его с помощью jquery (как после первого клика в моих примерах выше), затем вам нужно отменить привязку ($(this).unbind('click')
)
Затем вы просто перепривязываете с помощью bind ($(this).bind('click',function(event){//the code/function call}))
)
// важный - removeAttr: использовать 'onclick' и unbind: использовать 'click' - я думаю, что это была моя главная проблема!
не был уверен, стоит ли публиковать это как ответКак решение было прямо в моем вопросе!Извините, ребята, за отказ мозга.
Я знаю, что в вопросе говорится, что он не использует unbind / removeAttr, - потому что я думал, что он не работает с этими функциями - но это было только из-за использованияразличные функции.