Как добавить полную календарную дату в динамические текстовые поля

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

Ниже приведен мой код для создания новой строки: -

 $(function () {
        $('#addNewRow').click(function () {
            //$(".datepick").datetimepicker("destroy");

            $('<tr id="tablerow' + counter + '">< >' +

                                 @*<tr class="editorRow">*@
                                            $('#LineDEtail').find("#tablerow0:first").html() +
                                            @*</tr>*@

                '</>' +
                '<td style="padding-bottom:5px !important;">' +
                '<button type="button" class="btn btn-primary" onclick="removeTr(' + counter + ');" >Delete</button>' +
                '</td>' +
                '</tr>').appendTo('#submissionTable');
            //$(".datepick").datetimepicker();
            clickmeforcalender();
            counter++;
            return false;

        });
    });

Ниже приведен мой код для получения событий, которые сохраняются в календаре. В этом коде я определяю функцию для получения значения из полного календаря. У меня есть Акцент на этой части.

 $(".datepick").click(function () {
        debugger


        $('#calendar').show();
        var events = [];
        $.ajax({
            type: "GET",
            url: "/Booking/GetEvents",
            success: function (data) {
                $.each(data, function (i, a) {
                    events.push({
                        title: a.Function_Name,
                        start: a.Function_Date1,
                        url: a.Booking_ID
                        //Function_Slot:a.Function_Slot,
                        //Marquee_Name:a.Marquee_Name,
                        //Marquee_Slot: a.Marquee_Slot

                    });

                        $("#calendar").css("background-color", "WHITE");
                })

                GenerateCalender(events);
            },

            error: function (error) {
                alert('failed');
            }
        });

        ***$('#calendar').fullCalendar({
            dayClick: function (date, jsEvent, view) {
                $(".datepick").val(date.format())
            }
        });***

    });

.datepick — это имя класса моего текстового поля

Вот код текстового поля

 <td class="date col-sm-2">
    @Html.TextBoxFor(x => x.Function_Date, new { @class = "date glyphicon glyphicon-calendar datepick", @id = "", @name = "date[]", @onclick = "clickmeforcalender();" })
</td>

Ниже приведен код для GenerateCalender().

 function GenerateCalender(events) {
    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'addEventButton',
            right: 'month,agendaWeek,agendaDay,listWeek',

        },
        defaultDate: new Date(),
        navLinks: true,
        editable: true,
        eventLimit: true,
        events: events,



        eventClick: function (calEvent, jsEvent, view) {
            selectedEvent = calEvent;
            //alert('Event: ' + calEvent.title);
            jsEvent.preventDefault();

            $('#myModal #eventTitle').text(calEvent.title);
            var $description = $('<div/>');
            $description.append($('<p/>').html('<b>Start:</b>' + calEvent.start.format("DD-MMM-YYYY HH:mm a")));

            $description.append($('<p/>').html('<b>Description:</b>' + calEvent.title));
            $('#myModal #pDetails').empty().html($description);

            var temp = $('#myModal').modal();


        },


    });
}

Нужна срочная помощь спасибо

введите здесь описание изображения


person Khizar Nayyar    schedule 16.08.2019    source источник
comment
На самом деле вы не показывали код текстового поля, но если все ваши текстовые поля даты имеют класс datepick, тогда $(".datepick").val выберет их все и обновит все из них. Вот что делает селектор класса — он выбирает все элементы с одним и тем же классом. Вам нужно найти способ уникальной идентификации нужного вам текстового поля. Вы не предоставили нам достаточно информации, чтобы мы могли рассказать вам о хорошем способе сделать это, но это то, чего вам нужно добиться.   -  person ADyson    schedule 16.08.2019
comment
Я обновил код, добавил код текстового поля. Все еще нахожу способ однозначно идентифицировать мои текстовые поля   -  person Khizar Nayyar    schedule 19.08.2019
comment
Что делает функция clickmeforcalender()? Поскольку вы уже определили это событие щелчка во всех полях выбора даты, но затем вы также определяете $(".datepick").click, а затем снова выполняете clickmeforcalender();... так что это немного сбивает с толку, почему вы пытаетесь запустить эту функцию дважды.   -  person ADyson    schedule 19.08.2019
comment
Кроме того, чем больше я это вижу, тем больше похоже, что вы пытаетесь использовать fullCalendar просто как средство выбора даты ?? Это не его работа. Если это все, что вам нужно, возможно, вам нужно что-то вроде этого   -  person ADyson    schedule 19.08.2019
comment
Понял вашу точку зрения, я прокомментировал вызов clickmeforcalender(). Да, я использую полный календарь в качестве средства выбора даты, потому что я сохранил некоторые события в полном календаре.   -  person Khizar Nayyar    schedule 19.08.2019
comment
Для меня эти два факта никак не связаны друг с другом. Должен ли пользователь выбирать дату на основе местоположения существующих событий или что-то в этом роде?   -  person ADyson    schedule 19.08.2019
comment
Если есть какое-либо событие, FullCalendar покажет его, поэтому пользователь не выберет эту дату.   -  person Khizar Nayyar    schedule 19.08.2019
comment
Ok. Еще одна недостающая часть... что делает функция GenerateCalender?   -  person ADyson    schedule 20.08.2019
comment
GenerateCalender Используется для создания FullCalendar, который отлично работает.   -  person Khizar Nayyar    schedule 20.08.2019
comment
Нет, я имел в виду, можете ли вы показать это, пожалуйста. Тогда я смогу правильно все сложить в уме и, может быть, смогу предложить разумное решение.   -  person ADyson    schedule 20.08.2019
comment
Код обновлен, сэр.   -  person Khizar Nayyar    schedule 20.08.2019


Ответы (1)


Я думаю, что код имел бы больше смысла, если бы он был перестроен следующим образом:

Преимущества:

1) Вы запускаете функцию GetEvents AJAX только тогда, когда это действительно необходимо, а не каждый раз, когда вы открываете календарь

2) вы не создаете заново полный календарь каждый раз, когда нажимаете на поле даты

3) Вы устанавливаете глобальную переменную, представляющую последнее нажатое текстовое поле, чтобы fullCalendar знал, какое из них заполнять при нажатии даты.

//create the calendar just once
$('#calendar').fullCalendar({
    header: {
        left: 'prev,next today',
        center: 'addEventButton',
        right: 'month,agendaWeek,agendaDay,listWeek',
    },
    navLinks: true,
    editable: true,
    eventLimit: true,
    dayClick: function (date, jsEvent, view) {
        $(currentDateField).val(date.format()); //set the value on the last clicked date field
    },
    //dynamic on-demand event feed - see https://fullcalendar.io/docs/v3/events-function for details
    events: function (start, end, timezone, callback) { 
      $.ajax({
        type: "GET",
        url: "/Booking/GetEvents",
        success: function (data) {
            var events = [];
            $.each(data, function (i, a) {
                events.push({
                    title: a.Function_Name,
                    start: a.Function_Date1,
                    url: a.Booking_ID
                    //Function_Slot:a.Function_Slot,
                    //Marquee_Name:a.Marquee_Name,
                    //Marquee_Slot: a.Marquee_Slot
                });
            });
            callback(events);
        },
        error: function (error) {
            alert('failed');
        }
      });
    },
    eventClick: function (calEvent, jsEvent, view) {
        selectedEvent = calEvent;
        //alert('Event: ' + calEvent.title);
        jsEvent.preventDefault();
        $('#myModal #eventTitle').text(calEvent.title);
        var $description = $('<div/>');
        $description.append($('<p/>').html('<b>Start:</b>' + calEvent.start.format("DD-MMM-YYYY HH:mm a")));
        $description.append($('<p/>').html('<b>Description:</b>' + calEvent.title));
        $('#myModal #pDetails').empty().html($description);
        var temp = $('#myModal').modal();
    },
});

$("#calendar").hide();

var currentDateField = null; //to hold the last clicked date field

$(".datepick").click(function () {
  currentDateField = this; //assign the last clicked date field
  $('#calendar').show();
});
person ADyson    schedule 20.08.2019
comment
Спасибо за помощь. - person Khizar Nayyar; 22.08.2019