2016-10-26 6 views
0

Итак, у меня есть веб-приложение, над которым я работаю, и у меня есть раздел приложения с кнопкой развертывания, которая запускает модальный. В модальном режиме у меня есть еще две кнопки, одна для подтверждения и одна для отмены.Кнопка приращения и стрельбы несколько раз при нажатии

Когда модальный запуск и я нажимаю одну из кнопок, он срабатывает один раз. Тем не менее, моя проблема в том, что если я выйду из модального, снова откройте его и снова нажмите кнопку, он дважды запустит кнопку. Это будет продолжаться, если я повторю процесс, поэтому следующий щелчок вызовет три клика и т. Д. И т. Д.

Я пробовал использовать unbind и one безрезультатно в jQuery, и в данный момент я не понимаю.

Вот соответствующий jQuery для этого раздела. Я также могу прикрепить файл руля, который я использую, если это поможет.

JQuery:

//open modal, present OK and Cancel buttons 
$(".inventory").on('click', 'button.deploy', function() { 
    console.log('DEPLOY') 
    var machine = $(this).data("machine"); 
    var message = "Are you <b>SURE</b> you want to deploy the following machine:\n\n<b>" + $(this).data("machine") + "</b>"; 
    var newNetwork = $(this).parent().siblings(".select-option").find("option:selected").val(); 
    var currentDefault = $(this).parent().siblings(".select-option").attr('defaultValue'); 
    if (currentDefault !== newNetwork) { 
     message += "\n\nChanging the network from: \n\n " + currentDefault + " -> <b>" + newNetwork + "</b>\n\n"; 
    } 
    else { 
     message += "\n\nRestarting with the network:\n\n<b>" + currentDefault + "</b>\n\n"; 
    } 
    message += "<i>NOTE: Any other network changes made to other machines will result in possible changes " 
    message += "the next time there is a full deploy.</i>" 

    $("#reset-message").html(message); 
    $(".jquery-modal.blocker.current").show(); 
    $("div #reset-modal.modal").show(); 

    $("div #reset-modal").on('click', "#deploy-cancel", function() { 
     $(".jquery-modal.blocker.current").hide(); 
     $("div #reset-modal.modal").hide(); 
     console.log('CANCEL') 
    }); 

    $("div #reset-modal").on('click', "#deploy-confirm", function() { 
     $(".jquery-modal.blocker.current").hide(); 
     $("div #reset-modal.modal").hide(); 
     console.log('CONFIRM') 
    }); 
+0

Приложить модальные события вне ** $ на („нажмите“) ** или уничтожить модальность на шкурой/близко и воссоздать его в случае необходимости («инвентаризации.»). , На данный момент вы, кажется, скрываете модальность и повторно используете его, но каждый раз, когда вы его показываете, добавляете новый набор обработчиков кликов. – JonSG

+0

Так что мне нужно нажать кнопку 'button.deploy', чтобы вызвать презентацию кнопок' cancel' и 'confirm', а также открытие модального. Как это сделать, если эти события не содержатся в событии клика для кнопки развертывания? – Jason

+0

@JonSG Ты спасатель! Просто понял это. Огромное спасибо. – Jason

ответ

2

I t похоже, что вы добавляете несколько обработчиков событий.

Попробуйте это:

$("div #reset-modal").off('click', "#deploy-cancel").on('click', "#deploy-cancel", function()  { 
     $(".jquery-modal.blocker.current").hide(); 
     $("div #reset-modal.modal").hide(); 
     console.log('CANCEL') 
    }); 

    $("div #reset-modal").off('click', "#deploy-confirm").on('click', "#deploy-confirm", function() { 
     $(".jquery-modal.blocker.current").hide(); 
     $("div #reset-modal.modal").hide(); 
     console.log('CONFIRM') 
    }); 
+0

Это помогло мне. У меня возникла проблема с обработчиком кликов. Это дало мне идею отключить событие, а затем снова активировать его. Как то, как вы написали здесь. '.off()' then' .on() ' – breezy

0

Используйте это может работать

$('.inventory').unbind().bind('click','button.deploy',function(){ 

или

использовать это, он должен работать

$(".inventory").on('click', 'button.deploy', function (event) { 
    evt.stopPropagation(); 
    evt.preventDefault(); 
Смежные вопросы