【问题标题】:jQuery Programmatically Select Value - Odd IssuejQuery 以编程方式选择值 - 奇怪的问题
【发布时间】:2013-04-24 01:28:38
【问题描述】:

我遇到了一个有趣的问题,使用Select2FullCalendar 似乎无法解决。

单击事件后,我尝试使用数据库中的内容预先选择 Select2 下拉列表:

 $('#calendar').fullCalendar({
   eventClick: function(calEvent, jsEvent, view) {
            $("#view_event").modal();  //launches bootstrap modal
            $("#client_list_edit").select2();
            $("#client_list_edit").select2("val", calEvent.ClientID);
        }
 });  

这是我想不通的:当我eventClick 第一次时,它确实预先填充信息。

但是,当我第二次 eventClick(或 eventClick 日历上的任何其他事件)时,它可以正常工作正确选择并显示正确的值。

【问题讨论】:

    标签: javascript jquery fullcalendar jquery-select2


    【解决方案1】:

    我认为这是你想要的:

    http://jsfiddle.net/bU7wj/10/

    HTML

    <select id="events">
        <option>??????</option>
        <option value="00001">All Day Event</option>
        <option value="00002">Long Event</option>
        <option value="00003">Repeating Event</option>
        <option value="00004">Repeating Event x</option>
        <option value="00005">Meeting</option>
        <option value="00006">Lunch</option>
        <option value="00007">Birthday Party</option>
        <option value="00008">Click for Google</option>
    </select>
    <div id="calendar"></div>
    <div id="view_event" class="modal hide fade" tabindex="-1" role="dialog">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
            <h3>Modal header</h3>
        </div>
        <div class="modal-body">
            <p>More info here…</p>
        </div>
        <div class="modal-footer">
            <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Ok</button>
        </div>
    </div>
    

    JS

    $(function() {
    
        var events = $('#events');
        var calendar = $('#calendar');
        var modal = $('#view_event');
    
        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
    
        events.select2();
        calendar.fullCalendar({
            eventClick: function(event, jsEvent, view) {
    
                modal.find('h3').text(event.title);
                modal.modal();
                events.select2('val', event.ClientID);
    
            },
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,agendaWeek,agendaDay'
            },
            editable: true,
            events: [
                {
                    title: 'All Day Event',
                    start: new Date(y, m, 1),
                    ClientID: '00001'
                },
                {
                    title: 'Long Event',
                    start: new Date(y, m, d-5),
                    end: new Date(y, m, d-2),
                    ClientID: '00002'
                },
                {
                    id: 999,
                    title: 'Repeating Event',
                    start: new Date(y, m, d-3, 16, 0),
                    allDay: false,
                    ClientID: '00003'
                },
                {
                    id: 999,
                    title: 'Repeating Event x',
                    start: new Date(y, m, d+4, 16, 0),
                    allDay: false,
                    ClientID: '00004'
                },
                {
                    title: 'Meeting',
                    start: new Date(y, m, d, 10, 30),
                    allDay: false,
                    ClientID: '00005'
                },
                {
                    title: 'Lunch',
                    start: new Date(y, m, d, 12, 0),
                    end: new Date(y, m, d, 14, 0),
                    allDay: false,
                    ClientID: '00006'
                },
                {
                    title: 'Birthday Party',
                    start: new Date(y, m, d+1, 19, 0),
                    end: new Date(y, m, d+1, 22, 30),
                    allDay: false,
                    ClientID: '00007'
                },
                {
                    title: 'Click for Google',
                    start: new Date(y, m, 28),
                    end: new Date(y, m, 29),
                    url: 'http://google.com/',
                    ClientID: '00008'
                }
            ]
        });
    
    });
    

    更新

    我添加了一个Bootstrap的modal,js库版本是:

    • jQuery 1.9.1
    • 选择器2 3.3.2
    • 完整日历 1.6.1
    • jQuery UI 1.10.2
    • 引导程序 2.3.1

    【讨论】:

    • 非常感谢昏迷,这解决了我和 OP 一样的问题。该代码比我见过的其他代码更简单。
    【解决方案2】:

    试试

    $('#calendar').unbind('click').fullCalendar({
       eventClick: function(calEvent, jsEvent, view) {
            $("#view_event").modal();  //launches bootstrap modal
            $("#client_list_edit").select2();
            $("#client_list_edit").select2("val", calEvent.ClientID);
        }
    });
    

    看起来和我遇到的问题很相似..

    【讨论】:

      【解决方案3】:

      (应该是评论但我还是没有这个能力)

      我认为您应该在$(document).ready 中初始化select2,而不是在“eventClick”中。在“eventClick”中,您应该只有第二行$("#client_list_edit").select2("val", calEvent.ClientID);

      【讨论】:

      • 感谢您的回答。但是,select2 已经在$(document).ready 中初始化。我已经尝试过初始化 select2 并将其留在“eventClick”中,但它仍然产生相同的结果。
      【解决方案4】:

      不确定您指的是哪个模态库,但如果它正在使用 setTimeout 打开和加载内容,那么您的代码会在模态库中有内容之前执行。你可以试试这个看看是不是这样:

      $('#calendar').fullCalendar({
         eventClick: function(calEvent, jsEvent, view) {
                  $("#view_event").modal();  //launches bootstrap modal
                  setTimeout(function(){
                      $("#client_list_edit").select2();
                      $("#client_list_edit").select2("val", calEvent.ClientID);
                  }, 1000);
              }
       });  
      

      也许它有一个类似于https://github.com/tkirda/modal-box的API,以便在内容加载完成后执行代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        • 1970-01-01
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多