2013-09-26 4 views
0

Я пытаюсь добавить окно подтверждения ко многим ссылкам, кнопкам или входам в событие click.JQuery: Добавить обработчик подтверждения с функциями привязки/включения и запуска

Я не могу использовать location.href, подать(), или другие специфические особенности, потому что:

  • location.href, к примеру, не будет работать на кнопку отправки,
  • местоположение. Например, href не будет запускать другие связанные обработчики.

Так что мне нужно использовать функцию trigger(), которая теоретически выполняет все обработчики и собственное действие. «Трудная» часть состоит в том, чтобы выполнить все обработчики, ИСКЛЮЧИТЕ обработчик, который появляется в поле подтверждения.

Вот мой код:

$('a, button, input[type="submit"]').each(function() { 

    var oButton = $(this); 

    oButton.on('click.pending', function(oEvent) { 
     console.log('click !'); 
     oEvent.preventDefault(); 

     var oDialog = $('<div class="dialog-example">[Question] ?</div>').dialog({ 
      buttons: { 
       Cancel: function() { 
        console.log('cancelled !'); 
        // Nothing to do 
        oDialog.dialog('close'); 
       }, 
       Ok: function() { 
        console.log('confirmed !'); 
        // Trigger the rest of the handlers AND the native action, BUT not this one, so this dialog is not used 
        // Problem : nothing happens here 
        oButton.trigger('click.confirmed'); 
        oDialog.dialog('close'); 
       } 
      } 
     }); 
    }); 

}); 

Заранее спасибо! ;)

+0

могли бы вы создать скрипку, пожалуйста? –

+0

Скрипка: http://jsfiddle.net/Chicna/EerEF/2/ – Chicna

+0

В этом случае для «ясности» кода я использую что-то вроде этого: http://jsfiddle.net/EerEF/4/ (oops) –

ответ

0

Вы должны попробовать:

oButton.off('click.pending').trigger('click').get(0).click(); 

DEMO

+0

Ницца! Но проверка выполняется только один раз. Мне нужно отскочить обработчик после вашего кода, я думаю. – Chicna

+0

Нажав на якорь или отправить, предполагается перенаправить пользователя на новую страницу или перезагрузить текущую страницу, поэтому обычно вам не нужно переписывать событие. Тем не менее, вы все равно можете использовать ссылочную функцию и переустановить ее после запуска: http://jsfiddle.net/EHkGq/show/ –

+0

Новая скрипка: http://jsfiddle.net/Chicna/gtR2j/2/ – Chicna