Установка события onclick, удаляющего обработчики, прикрепленные ранее - PullRequest
1 голос
/ 04 июня 2010

В чем разница между настройкой функции onclick следующим образом: obj.onclick=new Function('functionname') и

obj.onclick=function(){ functionname();};

Как я могу установить событие onclick, удалив все предыдущие прикрепленные файлы? (используя jquery или просто javascript) я пытаюсь что-то вроде этого:

$ (OBJ) .unbind ( 'щелчок');

$ (obj) .click (function () { имя_функции (); });

но удаление, похоже, удаляет даже следующие прикрепленные события. Спасибо EDIT:

Я установил событие click, используя jquery:

function ON(){ 
 $('#makecorr').unbind('click');//i unbind for some reason..    
 $('#makecorr').click(function() { OFF(); }); 
} 
function OFF(){
 $('#makecorr').unbind('click');//i want to remove prev attached fun 
 //and replace it with new event 
 $('#makecorr').click(function() { ON(); }); 
} 

это не работает для меня, когда я щелкаю объект 'makecorr', он зацикливается, если я ставлю предупреждение, он появляется бесконечно но когда я использую: '

function ON(){
$('#makecorr').get(0).onclick=new Function('OFF()');
} 
function OFF()
{
 $('#makecorr').get(0).onclick=new Function('ON()');
} 

это работает. странно, где я не прав?

1 Ответ

2 голосов
/ 04 июня 2010

Эта пара строк:

$(obj).unbind('click');
$(obj).click(function() { functionname(); });

... при выполнении в указанном выше порядке должен быть присоединен только тот обработчик, который вы определили там. Если вы видите другое поведение, это должно быть что-то еще в сценарии.

Что касается

В чем разница между настройкой функции onclick следующим образом:
obj.onclick=new Function('functionname') и
obj.onclick=function(){ functionname();};

Если вы динамически добавляете обработчики к элементу и уже используете jQuery по другим причинам, вы вообще не хотите использовать свойство onclick; придерживайтесь API jQuery, чтобы не запутаться. : -)

Даже если вы не используете jQuery, вы почти никогда не захотите использовать new Function(...). Есть только очень особые ситуации, когда вам это нужно. В основном придерживайтесь function() { functionname(); } (или просто используйте functionname напрямую).

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