4

У меня есть всплывающее окно подтверждения/отмены javascript, которое динамически отменяет флажок, а также динамически скрывает или отображает menu_entry, который является частью списка, который появляется в форме, только когда пользователь выбирает ok на всплывающем окне подтверждения js.передать переменные в bootstrap modal

Теперь я пытаюсь изменить js confirm на bootstrap modal, но я не уверен, как передать переменные в модальный код bootstrap и получить ту же функциональность всплывающего окна js confirm.

Вот мой рабочий HTML код, который имеет вызов в JavaScript подтверждающий выскочит окно:

{% for id, menu_entry, selected, item_count in menu_entries %} 

    <div class="available_resume_details_height"> 
     <input type="checkbox" 
       style="width:1.5em; height:1.5em;" 
       name="selected_items" 
       value="{{ id }}" 
       {% if selected %}checked="checked"{% endif %} 

       onclick="checkboxUpdated(this, {{ item_count }}, '{{ menu_entry.label }}', {{ id }});" 
     /> 

     <span style="cursor: pointer;" 
       rel="popover" 
       data-content="{{ menu_entry.tooltip }}" 
       data-original-title="{{ menu_entry.label }}" 
       {{ menu_entry.label }} 
     </span> 

    </div> 

{% endfor %} 

Вот мой Javascript код для отображения подтверждения всплывающего и снимите флажок и показать/скрыть список код:

function checkboxUpdated(checkbox, count, label, id) { 
    if (checkbox.checked) { 
     $('#menu_entry_' + id).show(); 
    } else { 
     if (count > 0) { 
      if (! confirm('{% trans "You have '+ count +' saved '+ label +'.\n\nAre you sure you want to delete your ' + count + ' saved ' + label +'?" %}')) { 
       checkbox.checked = true; 
       return; 
       } 
      } 
     $('#menu_entry_' + id).hide(); 
    } 
} 

Новый код html, который имеет вызов bootstrap modal. Это делает загрузочный модальный вид:

{% for id, menu_entry, selected, item_count in menu_entries %} 

    <div class="available_resume_details_height"> 
     <input type="checkbox" 
       style="width:1.5em; height:1.5em;" 
       name="selected_items" 
       value="{{ id }}" 
       {% if selected %}checked="checked"{% endif %} 

       {% if selected %} 
        data-confirm="{% blocktrans with entry_label=menu_entry.label %}Are you sure you want to remove your {{ item_count }} selected {{entry_label}} Resume Details?{% endblocktrans %}" 
       {% endif %} 

     /> 

     <span style="cursor: pointer;" 
       rel="popover" 
       data-content="{{ menu_entry.tooltip }}" 
       data-original-title="{{ menu_entry.label }}" 
       {{ menu_entry.label }} 
     </span> 

    </div> 

{% endfor %} 

Это мой загрузочный модальный код, который не работает. Я не уверен, как передать переменные и получить ту же функциональность JS подтверждают всплывал:

$(document).ready(function() { 

     $('input[data-confirm]').click(function(ev) { 

      var href = $(this).attr('href'); 

      if (!$('#dataConfirmModal').length) { 

       $('body').append('<div id="dataConfirmModal" class="modal modal-confirm-max-width" role="dialog" aria-labelledby="dataConfirmLabel" aria-hidden="true"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true"><icon class="icon-remove"></icon></button><h4 class="modal-title" id="dataConfirmLabel">{% trans "Confirm" %} - {{ resume_detail_temp_value }}</h4></div><div class="modal-body"></div><div class="modal-footer"><button class="btn" data-dismiss="modal" aria-hidden="true">{% trans "Cancel" %}</button>&nbsp;&nbsp;<a class="btn-u btn-u-blue" id="dataConfirmOK">{% trans "Confirm" %}</a></div></div>'); 

      } 

      $('#dataConfirmModal').find('.modal-body').html($(this).attr('data-confirm')); 

      $('#dataConfirmModal').modal({show:true}); 

      $('#dataConfirmOK').click(function() { 

       // handle checkbox function here. 

      }); 

      return false; 
     }); 

    }); 

Бутстраповское модальный должен показать/скрыть элемент списка и только снимите флажок при выборе кнопки подтверждения.

EDIT: ДОБАВЛЕНО CHECKBOX КОД:

<input type="checkbox" 
     style="width:1.5em; height:1.5em;" 
     name="selected_items" 
     value="{{ id }}" 
     {% if selected %}checked="checked"{% endif %} 
     onclick="checkboxUpdated(this, {{ item_count }}, '{{ menu_entry.label }}', {{ id }});"/> 

ответ

1

данных могут помочь вам передать вам данные в функции в бесшовных м anner, а также поможет избежать недружественного встроенного JavaScript. Настройка трех слушателей событий следующим образом:

function checkboxUpdated(checkbox, count, label, id) { 
    var checkbox = this, 
     count = $(checkbox).data('count'), 
     label = $(checkbox).data('label'), 
     id = checkbox.value; 
    if(checkbox.checked) { 
     $('#menu_entry_' + id).show(); 
    } else { 
     if (count > 0) { 
      $('#confirm_modal').data('element', checkbox).find('div.modal-body p:first') 
      .html('You have ' + count + ' saved ' + label + '. Are you sure you want to delete your ' + count + ' saved ' + label + '?').end() 
      .modal('show'); 
      return; 
     } 
     $('#menu_entry_' + id).hide(); 
    } 
} 
$(function() { 
    $(':checkbox').on('change', checkboxUpdated).change(); 
    $('.confirm-no').on('click', function() { 
     var element = $('#confirm_modal').data('element'); 
     element.checked = true; 
    }); 
    $('.confirm-yes').on('click', function() { 
     var element = $('#confirm_modal').data('element'), 
      id = element.value; 
     $('#menu_entry_' + id).hide(); 
    }); 
}); 

DEMO

+0

Спасибо. Это было очень полезно. – user1261774

+0

Отличный !! Рад, что вы нашли это полезным. Наслаждайтесь! – PeterKA

0

Я надеюсь, что это может помочь вам. Вы можете увидеть мой код отсюда http://jsfiddle.net/p0mpv9e0/3/.

Почему ваш код не работает, потому что вы забываете поместить атрибут 'data-confirm' в элемент ввода. Оно должно быть:

<input type="checkbox" data-confirm ... /> 

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

$('input[data-confirm]').click(function() { 
    var self = this; // it's object that store data from input element 
}); 
1

UPDATE

http://jsfiddle.net/n0ypwceo/3/

**HTML** 

<div class="available_resume_details_height"> 
    <input type="checkbox" data-confirm='Are you sure you want to remove? [1] ' value="id1" /> <span style="cursor: pointer;">Checkbox</span> 

    <br/> 
    <input type="checkbox" data-confirm='Are you sure you want to remove? [2]' value="id2" /> <span style="cursor: pointer;">Checkbox</span> 

</div> 

<div id="dataConfirmModal" class="modal modal-confirm-max-width" role="dialog" aria-labelledby="dataConfirmLabel" aria-hidden="true"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true"><icon class="icon-remove"></icon></button><h4 class="modal-title" id="dataConfirmLabel">Confirm?</h4></div><div class="modal-body"></div><div class="modal-footer"><button class="btn" data-dismiss="modal" aria-hidden="true">"Cancel"</button>&nbsp;&nbsp;<a class="btn-u btn-u-blue" id="dataConfirmOK">"Confirm"</a></div></div> 

<div id="menu_entry_id1" style="display:none">menu entry id 1</div> 
<div id="menu_entry_id2" style="display:none">menu entry id 2</div> 

JQ: атрибуты

// global vars 
//checkbox that is clicked 
var $checkboxClicked; 
//If the confirm button is clicked 
var confirm=false; 

$(document).ready(function() { 

    $('input[data-confirm]').click(function (ev) { 

     //box that is clicked placed in a variable 
     $checkboxClicked = $(this); 
     //get and store confirm text 
     var dataConfirmTxt=$checkboxClicked.attr('data-confirm') 

     confirm = false; 

     //var href = $(this).attr('href'); 

     //append confirm text 
     $('#dataConfirmModal').find('.modal-body').html(dataConfirmTxt); 
     //show moadl 
     $('#dataConfirmModal').modal('show') 
     //if confirm button selected 
     $('#dataConfirmOK').click(function() { 

      // the confirm button is clicked 
      confirm=true; 

      // hide modal 
      $('#dataConfirmModal').modal('hide') 

     }); 

     return false; 
    }); 

    //modal event: before hide  
    $('#dataConfirmModal').on('hidden.bs.modal', function (e) { 

     //get menu id 
     var id=$checkboxClicked.val(); 
     //alert(id+'/'+confirm);   
     if(confirm==true)  
     { 
      // check checkbox 
      $checkboxClicked.prop('checked', true); 
      // show menu entry 
      $('#menu_entry_' + id).show(); 
     } 
     else 
     { 
      // uncheck checkbox 
      $checkboxClicked.prop('checked', false); 
      // hide menu entry 
      $('#menu_entry_' + id).hide(); 
     } 
    }) 

}); 
+0

dm4web, спасибо. Вы близки, но мне также нужно передать переменную id, чтобы можно было отображать или скрывать запись в меню, например: $ ('# menu_entry_' + id).скрывать(); или $ ('# menu_entry_' + id) .show(); Как передать переменную id, что мне трудно сделать. – user1261774

+0

id of checkbox? – dm4web

+0

Я добавил код ячейки с идентификатором. Помогает ли это? – user1261774

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