Объединение функций jQuery в одну функцию

#jquery

#jquery

Вопрос:

Я создаю своего рода доску заданий, и есть два режима, которые запускаются с одной страницы НЕ одновременно. Я создал эти функции для запуска модалов. Не могли бы вы подсказать мне, как написать это кратчайшим путем (если это возможно). Спасибо. итак, это основная часть моего html-кода:

                 <div class="col-md-9">
                    <a id="test" href="#destination">FIRST modal</a>
                    <!-- Modal -->
                    <div id="destination"></div>
                    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                        <div class="modal-dialog">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">amp;times;</span><span class="sr-only">Close</span></button>
                                    <h4 class="modal-title" id="myModalLabel">Modal title</h4>
                                </div>
                                <div class="modal-body">
                                    <h3>First Modal</h3>
                                </div>
                                <div class="modal-footer">
                                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                    <button type="button" class="btn btn-primary">Save changes</button>
                                </div>
                            </div>
                        </div>
                    </div>  <!-- END First -->

                    <a id="test2" href="#destination2">SECOND modal</a>
                    <!-- Modal -->
                    <div id="destination2"></div>
                    <div class="modal fade" id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                        <div class="modal-dialog">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">amp;times;</span><span class="sr-only">Close</span></button>
                                    <h4 class="modal-title" id="myModalLabel">Modal title</h4>
                                </div>
                                <div class="modal-body">

                                    <h3>Second Modal</h3>

                                </div>
                                <div class="modal-footer">
                                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                    <button type="button" class="btn btn-primary">Save changes</button>
                                </div>
                            </div>
                        </div>
                    </div>  <!-- END Second -->
  

и Jquery я хотел бы «сократить»

 jQuery(function (){
    $('#test').click(function(){
        $('#myModal').modal('show');
    });
    $('#test2').click(function(){
        $('#myModal2').modal('show');
    });
});
  

Комментарии:

1. Предоставление разметки HTML наверняка помогло бы… Теперь, я думаю, вы могли бы просто использовать классы и индексы для таргетинга на определенный один модальный

2. Что не так с текущей?

3. проблема в том, что у меня будет 20 или более модалов для запуска, и я думаю, смогу ли я сделать это короче.

4. @HubertKubasiewicz если вы можете изменить разметку HTML, вы можете добавить атрибут data-modalId, а затем создать общую функцию jQuery

Ответ №1:

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

 <button type="button" class="test" data-target="#myModal">Open modal</button>
<button type="button" class="test" data-target="#myModal2">Open modal #2</button>
  

Затем вы можете прочитать этот data атрибут в своем обработчике щелчков, чтобы вызвать modal() правильный элемент:

 jQuery(function (){
    $('.test').click(function(){
        var target = $(this).data('target');
        $(target).modal('show');
    });
});
  

Комментарии:

1. Проблема в том, что я не хочу иметь кнопку, я хочу, чтобы люди могли нажимать на название должности, и в этот момент запускался модальный режим. До сих пор я достиг этого эффекта, но я хотел бы, чтобы файл js был как можно короче. Может быть, это не очень хорошая идея, и все должно быть так, как я написал.

2. Это button всего лишь пример. Этот метод может быть применен к любому HTML, который вы хотите использовать. Если вы отредактируете свой вопрос, чтобы включить свой текущий HTML, я могу привести вам более полный пример

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

4. <a id=»test» href=»#destination» data-target=»#myModal»>ПЕРВЫЙ модальный</a>

5. Хорошо, теперь он работает, мне не хватало данных-toggle =»modal» 🙂

Ответ №2:

Если в вашем HTML, ваши элементы #test и #test2 имеют data-id атрибут, например, вы можете сделать :

 jQuery(function (){
    $('#test, #test2').click(function(){
        var id = $(this).attr('data-id');
        $('#myModal' id).modal('show');
    });
});
  

Если data-id атрибут элемента равен 2, эта функция открывает модальный #myModal2

Комментарии:

1. Итак, у меня есть в первом модальном id = test и id = myModal, а во втором модальном id = test2 и id = myModal2. И если я скопирую ваше предложение на 100%, ничего не будет работать, но если я удалю » id», оно будет работать, но при нажатии на первый или второй вариант срабатывает только первый модальный.

2. Отредактируйте свой пост и, пожалуйста, передайте свой HTML.