Обновление функции onclick внутри другой функции, не использующей unbind / removeAttr - PullRequest
2 голосов
/ 21 июля 2011

прочитайте окончательное редактирование решения

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

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Не уверен, что вы пытаетесь достичь, но чтобы отменить привязку события клика, просто используйте $ (this) .unbind ('click')

0 голосов
/ 02 сентября 2014

Обобщенный ответ, который я успешно использовал,

если вы установите onclick через html, вам нужно удалитьAttr ($ (this) .removeAttr ('onclick')) *

если вы установите его с помощью jquery (как после первого клика в моих примерах выше), вам нужно отменить привязку ($ (this) .unbind ('click'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...