2016-12-21 4 views
0

Так у меня есть элемент, который имеет существующий Click Event Handler и я пытаюсьУдаление Javascript События

  • Добавить второй Нажмите Event Handler (Item.executeSelectClick), что позволит предотвратить первый Click Handler
  • Затем, если пользователь нажимает кнопку «Продолжить» $ («# out-of-policy»). Find ('# c-modal-continue'). Нажмите
  • Удалите мой второй обработчик событий Click (Item.executeSelectClick) и продолжайте с оригинальным обработчиком событий.
    • button.removeEventListener ('click', Item.executeSelectClick);
    • setTimeout (функция() {$ (кнопка) .click()}, 3000);

Пожалуйста, обратите внимание, у меня нет ссылки первый Click Handler, и я не смогу получить.

Item.executeSelectClick = function(event){ 
    var button = event.target; 

    $('#out-of-policy').find('#c-modal-proceed').click(function(){ 
     $('#out-of-policy').css('display', 'none'); 
     button.removeEventListener('click', Item.executeSelectClick); 
     setTimeout(function(){$(button).click()}, 3000); 
    }); 

    $('#out-of-policy').show(); 

    event.preventDefault(); 
    event.stopImmediatePropagation(); 
    return false; 
} 

В настоящее время, что происходит это второй Event Хэндлер не удалить, и при нажатии на кнопку SetTimeout (функция() {$ (кнопка) .click()}, 3000); второй Click Event Handler продолжает перехватывать запрос.

+0

Могу ли я спросить, что общая цель здесь? Это похоже на очень странное взаимодействие между страницей и кодом. – ManBearPixel

+0

Я думаю, что это на самом деле дубликат вопроса, который я задал перед http://stackoverflow.com/questions/33045624/turning-off-specific-click-event – zfrisch

+0

@ManBearPixel общей целью является перехват события, которое у меня нет контролировать и вводить требуемый пользовательский ввод для продолжения. –

ответ

0

Наверху previous SO answer, который обсудил пространства имен в настройке событий JavaScript и предположил, что вы используете jQuery (как видно из вашего вопроса), этот фрагмент кода должен быть полезен для вашей ситуации. Первый щелчок на .target остановит propagations событий по умолчанию, запустите ваш код, а затем удалить обработчик события клика, которая была установка:

$('.target').on('click.stopDefault', function(event){ 
    event.preventDefault(); 
    event.stopImmediatePropagation(); 

    console.log('Your code executed here...'); 

    $('.target').off('click.stopDefault'); 

}); 
0

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

$(function() { 
 
    var $original = $('#original'); 
 
    var $dupe = $original.clone(false); 
 
    
 
    // just something that'll hold a response 
 
    var $response = $('#response').find('span'); 
 
    
 
    // position the clone with the original 
 
    $original.after($dupe); 
 
    // hide the original button 
 
    $original.hide(); 
 
    
 
    // assign the clone something to do 
 
    $dupe.on('click', function(e) { 
 
    e.preventDefault(); 
 
    // clone stuff here 
 
    $response.text('attack of the clone!'); 
 
    // when clone finished doing its thing, 
 
    // simply hide it and show the original button 
 
    $dupe.hide(); 
 
    $original.show(); 
 
    }); 
 
    
 
    // nothing here, say the original got clicked... 
 
    $original.on('click', function(e) { 
 
    e.preventDefault(); 
 
    $response.text('original clicked!'); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<a id="original" href="#">click me</a> 
 
<p id="response">response: <span></span> 
 
</p>

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