如何在jqGrid中的日期列中使用input type ='date'

安德鲁斯

用于内联编辑的jqGrid日期列是使用下面的colmodel和javascript定义的。

它使用jquery ui-date选择器。这要维护很多代码,结果很丑陋。

如果浏览器(而不是此代码)支持html5本机输入type ='date',则如何使用它进行内联日期编辑?

协同模型:

{"template":DateTemplate
,"label":"Invoice date",
"name":"Invoicedate",
"index":"Invoicedate",
"editoptions":{
  "dataInit":initDateWithButton
  ,"size":10
  },

"searchoptions":{"dataInit":initDateWithButton
,"size":10,"attr":{"size":10}},"width":50
}

javascript:

var DateTemplate = {
    sorttype: 'date', formatter: 'date',
    formatoptions: {
        srcformat: "Y-m-d"
    },

    editoptions: { maxlength: 10, size: 10, dataInit: initDateWithButton },
    editable: true,
    searchoptions: {
        sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge'],
        dataInit: initDateWithButton,
        size: 11,          // for the advanced searching dialog 
        attr: { size: 11 }   // for the searching toolbar 
    }
};

var initDateWithButton = function (elem) {
    if (/^\d+%$/.test(elem.style.width)) {
        // remove % from the searching toolbar 
        elem.style.width = '';
    }
    // to be able to use 'showOn' option of datepicker in advance searching dialog 
    // or in the editing we have to use setTimeout 
    setTimeout(function () {
        $(elem).css({ "box-sizing": "border-box", width: "5.7em" }).datepicker({
            // dateFormat: 'dd.mm.yy',
            showOn: 'button',
            changeYear: true,
            changeMonth: true,
            showWeek: true,
            showButtonPanel: true,
            onClose: function (dateText, inst) {
                inst.input.focus();
            }
        })
            .removeClass("ui-corner-all").addClass("ui-corner-left");

        $(elem).next('button.ui-datepicker-trigger').button({
            text: false,
            icons: { primary: 'ui-icon-calendar' }
        }).css({ width: '1em', height: '1.09em' })
            .removeClass("ui-corner-all").addClass("ui-corner-right")
        .find('span.ui-button-text')
        .css({ padding: '0.1em' })
        .siblings('span.ui-button-icon-primary')
        .css({ marginLeft: "-8.5px", marginTop: "-8.5px" });
        $(elem).next('button.ui-datepicker-trigger').andSelf().css("verticalAlign", "middle");
    }, 100);
};

这是ASP.NET MVC4应用程序。

更新

我尝试回答但遇到问题。

  1. 有问题的日期模板不包含新格式,因此仍未定义。我将日期解析行替换为

    $(elem).val($.jgrid.parseDate($.jgrid.formatter.date.newformat, orgValue, "Y-m-d"));
    

根据评论中的建议。

  1. 线 str = $.jgrid.parseDate("Y-m-d", $this.val(), cm.formatoptions.newformat);

限制有效日期,该日期已经转换为iso,例如1973-02-15长格式Thu Feb 15 1973 00:00:00 GMT+0200 (FLE Standard Time)

要求的结果是1973-02-15,因此不需要转换。

我通过替换线解决了这个问题

$this.val(str);

$ this.val($ this.val());

  1. 日期内联编辑完成后,日期以iso格式显示在列中。仅在刷新网格后才显示本地化日期。

** 更新 **

日期不适合列宽。在IE中的按钮可见:

iebutton

但在Chrome中,对于相同的列宽,会出现大的空白空间,并且只有第一个按钮的一部分可见:

铬合金

如何解决此问题,以使按钮在相同的列宽下可见?

奥列格

我发现您的问题很有趣,并创建可在没有jQuery UI Datepicker的Google Chrome中运行的演示,并在日期编辑过程中显示了类似

在此处输入图片说明

演示的列invdate定义如下

{ name: "invdate", width: 120, align: "center", sorttype: "date",
    formatter: "date", formatoptions: { newformat: "m/d/Y"}, editable: true,
    editoptions: { dataInit: initDateEdit } }

initDateEdit我定义为的回调函数

var initDateEdit = function (elem, options) {
    // we need get the value before changing the type
    var orgValue = $(elem).val(),
        cm = $(this).jqGrid("getColProp", options.name);

    $(elem).attr("type", "date");
    if ((Modernizr && !Modernizr.inputtypes.date) || $(elem).prop("type") !== "date") {
        // if type="date" is not supported call jQuery UI datepicker
        $(elem).datepicker({
            dateFormat: "mm/dd/yy",
            autoSize: true,
            changeYear: true,
            changeMonth: true,
            showButtonPanel: true,
            showWeek: true
        });
    } else {
        // convert date to ISO
        $(elem).val($.jgrid.parseDate.call(this, cm.formatoptions.newformat, orgValue, "Y-m-d"));
    }
};

我还不够了解<input type="date"/>它使用日期输入格式作为ISO。因此,我将原始文本上方的代码转换为ISO以在编辑过程中显示正确的日期。以同样的方式,必须将编辑结果转换回formatoptions.newformatbeforeSaveRow在这种情况下,我使用了回调:

onSelectRow: function (rowid) {
    var $self = $(this),
        savedRow = $self.jqGrid("getGridParam", "savedRow");
    if (savedRow.length > 0 && savedRow[0].id !== rowid) {
        $self.jqGrid("restoreRow", savedRow[0].id);
    }
    $self.jqGrid("editRow", rowid, {
        keys: true,
        beforeSaveRow: myBeforeSaveRow
    });
}

其中myBeforeSaveRow的定义如下:

var myBeforeSaveRow = function (options, rowid) {
    var $self = $(this), $dates = $("#" + $.jgrid.jqID(rowid)).find("input[type=date]");
    $dates.each(function () {
        var $this = $(this),
            id = $this.attr("id"),
            colName = id.substr(rowid.length + 1),
            cm = $self.jqGrid("getColProp", colName),
            str;
        if ((Modernizr && Modernizr.inputtypes.date) || $this.prop("type") === "date") {
            // convert from iso to newformat
            str = $.jgrid.parseDate.call($this[0], "Y-m-d", $this.val(), cm.formatoptions.newformat);
            $this.attr("type", "text");
            $this.val(str);
        }
    });
};

更新另一个演示程序支持更好的Opera 24和空输入日期。

更新2: 该演示包含小的修改(thisfor的设置$.jgrid.parseDate),它使用了免费的jqGrid 4.8

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 type="date" 在 TextBox 中显示日期

来自分类Dev

如何在Django中使用attrs = {'type':'date',}在form.widgets.DateInput中添加占位符?

来自分类Dev

input type=date in iOS 7

来自分类Dev

如何使用jQuery从HTML <input type =“ date”>中提取值

来自分类Dev

<input type ='date'>在选择日期时使Dartium崩溃

来自分类Dev

在Chrome中设置输入[type = date]的样式

来自分类Dev

如何转换时间戳并放入<input type =“ date”>?

来自分类Dev

当input [type = date]接收到值时,如何显示元素?

来自分类Dev

隐藏QFileSystemModel中的Size,Type和Date修改列

来自分类Dev

如何监听输入中的段值 (__/__/___) 变化[type="date"]

来自分类Dev

如何使用simple_form生成输入[type = date]?

来自分类Dev

HTML 5 Input type ='date'禁用键盘输入

来自分类Dev

将C#Datetime转换为input [type = date]

来自分类Dev

如何在Javascript中使用FileList(来自<input type =“ file”>)?

来自分类Dev

如何检测输入的浏览器格式[type = date]

来自分类Dev

连接后如何转换为date data_type?

来自分类Dev

如何检测浏览器的输入格式[type = date]

来自分类Dev

sonata_type_date_picker无法使用多种语言

来自分类Dev

sonata_type_date_picker无法使用多种语言

来自分类Dev

如何在pyspark中的两列中使用date_add?

来自分类Dev

如何为 Material-ui TextField Type=date 设置默认日期

来自分类Dev

使用Date对象和<input type =“ time”>进行数学运算

来自分类Dev

如何在tmap中使用过滤器比较两个日期类型的DATE

来自分类Dev

如何在bean类属性(java.util.Date)中使用datepicker从html表单存储日期

来自分类Dev

如何在Javascript中使用Date获取相对于当前时区的日期?

来自分类Dev

HTML5 TextBox Type = date是否导致日期字符串重新格式化?

来自分类Dev

jqGrid日期列排序不适用于sorttype:'date'

来自分类Dev

jqGrid日期列排序不适用于sorttype:'date'

来自分类Dev

将<input type =“ date” ng-model =“ jobDueDate”>隐式转换为Unix时间戳

Related 相关文章

  1. 1

    使用 type="date" 在 TextBox 中显示日期

  2. 2

    如何在Django中使用attrs = {'type':'date',}在form.widgets.DateInput中添加占位符?

  3. 3

    input type=date in iOS 7

  4. 4

    如何使用jQuery从HTML <input type =“ date”>中提取值

  5. 5

    <input type ='date'>在选择日期时使Dartium崩溃

  6. 6

    在Chrome中设置输入[type = date]的样式

  7. 7

    如何转换时间戳并放入<input type =“ date”>?

  8. 8

    当input [type = date]接收到值时,如何显示元素?

  9. 9

    隐藏QFileSystemModel中的Size,Type和Date修改列

  10. 10

    如何监听输入中的段值 (__/__/___) 变化[type="date"]

  11. 11

    如何使用simple_form生成输入[type = date]?

  12. 12

    HTML 5 Input type ='date'禁用键盘输入

  13. 13

    将C#Datetime转换为input [type = date]

  14. 14

    如何在Javascript中使用FileList(来自<input type =“ file”>)?

  15. 15

    如何检测输入的浏览器格式[type = date]

  16. 16

    连接后如何转换为date data_type?

  17. 17

    如何检测浏览器的输入格式[type = date]

  18. 18

    sonata_type_date_picker无法使用多种语言

  19. 19

    sonata_type_date_picker无法使用多种语言

  20. 20

    如何在pyspark中的两列中使用date_add?

  21. 21

    如何为 Material-ui TextField Type=date 设置默认日期

  22. 22

    使用Date对象和<input type =“ time”>进行数学运算

  23. 23

    如何在tmap中使用过滤器比较两个日期类型的DATE

  24. 24

    如何在bean类属性(java.util.Date)中使用datepicker从html表单存储日期

  25. 25

    如何在Javascript中使用Date获取相对于当前时区的日期?

  26. 26

    HTML5 TextBox Type = date是否导致日期字符串重新格式化?

  27. 27

    jqGrid日期列排序不适用于sorttype:'date'

  28. 28

    jqGrid日期列排序不适用于sorttype:'date'

  29. 29

    将<input type =“ date” ng-model =“ jobDueDate”>隐式转换为Unix时间戳

热门标签

归档