Search code examples
javascriptjquerykendo-uidatepickerkendo-grid

jQuery - How do I set todays date on Kendo DatePicker inside Kendo Grid upon dropdown value change


Background:

I have a jQuery Kendo grid with below columns where I am allowing users to do inline editing in batch mode.

   columns: [
        { field: "MedRecRcvd", title: "Med Rec Rcvd", width: "30px", editor: medRecRcvdDropDownEditor, template: "#=MedRecRcvd.MedRecRcvdName#" },
        {
            field: "dateReceived", title: "Date Rcvd", format: "{0:dd MMM yyyy}", width: 30, editor: function (container, options) {
                var input = $("<input />");
                input.attr("name", options.field);

                input.appendTo(container);

                input.kendoDatePicker({
                  
                });
            }
        }]

Requirement: MedRecRcvd dropdown has 3 possible values. One of the requirement is when the selected value for MedRecRcvd is selected as "Yes" then set "dateReceived" to today's date.

Here's what I have got so far: For MedRecRcvd dropdown I have got an editor function where I am trying to assign todays date when a change event is fired. I need help assigning todays date to the datepicker if selected value of MedRecRcvd is "Y". As you can see I tried variety of things to get instance of the kendo datepicker and set a value but I am pretty much hitting a wall now. Any ideas would be appreciated !

function medRecRcvdDropDownEditor(container, options) {
    $('<input required name="' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: true,
            dataTextField: "MedRecRcvdName",
            dataValueField: "MedRecRcvdId",
            change: function (e) {
                var value = this.value();
                if (value != null && value == "Y") {
                    var grid = e.sender.element.closest(".k-grid").data("kendoGrid");
                    var row = e.sender.element.closest("tr");
                    var medRecdtPicker = e.sender.element.closest("[name='dateReceived']").data("kendoDatePicker");
                    medRecdtPicker.setDate(new Date());  
                }            
            },
            dataSource: {
                transport: {
                    read: function (e) {
                        e.success(datasource);
                    },

                }
            }
        });
}

Solution

  • You could directly assign the value to the model.

    e.g.

    function medRecRcvdDropDownEditor(container, options) {
        $('<input required name="' + options.field + '"/>')
            .appendTo(container)
            .kendoDropDownList({
                autoBind: true,
                dataTextField: "MedRecRcvdName",
                dataValueField: "MedRecRcvdId",
                change: function (e) {
                    var value = this.value();
                    if (value != null && value == "Y") {
                        options.model.set('dateReceived', new Date())
                    }            
                },
                dataSource: {
                    transport: {
                        read: function (e) {
                            e.success(datasource);
                        },
    
                    }
                }
            });
    }