Zend Framework 中的 Datatables、jeditable 和 jquery timepicker,fnupdate 无法更新旧值

发布于 2025-01-02 06:56:15 字数 3197 浏览 0 评论 0原文

我编写了一个将 timepicker 与 editable 集成的代码,该代码用于使除隐藏 id coulmn 和第一个显示的 coulmn editable 之外的所有 coulmn 。我无法让 fnupdate 使我编辑的内容在发布到服务器端时更新为新值。我能够获取服务器端处理的发布值,但客户端没有通过 fnupdate 进行更新。

请参阅下面的代码并尝试告诉我我做错了什么,因为我有很多页面的功能相同。

    $(document).ready(function() {

        oTable = $('#scheduleTable').dataTable(
        {
            "sDom"          : '<"top"flip>rt<"bottom"<"clear">',
            "bAutoWidth"    : false,
            "bProcessing"   : true,
            bJQueryUI:true,
            "bServerSide": true,
            "bFilter":false,
            "bSort": false,
            "bInfo": false,
            "bPaginate":false,
            "aoColumns":[
                {
                    "bVisible" : false
                },
                {
                },
                {},
                {},
                {},
                {}
            ],
            "fnRowCallback" : function (nRow, aData, iDisplayIndex) {
                $(nRow).attr('id', '' + aData[0]);
                //i starting from one to make the first element in td non editable
                for (i = 1; i < aData.length; i ++) {
                    $('td:eq(' + i + ') ', nRow).editable("<?= $aupdateUrl; ?>", {
                        'callback': function (sValue, y) {
                            var aPos = oTable.fnGetPosition(this);
                            oTable.fnUpdate(sValue, aPos[0], aPos[1]);

                        },
                        "submitdata": function ( value, settings ) {
                            return {
                                "row_id": this.parentNode.getAttribute('id'),
                                "column": oTable.fnGetPosition( this )[2]
                            };
                        },
                        'height': '14px',
                        indicator : 'Saving...',
                        tooltip : 'Doubleclick to edit...',
                        type       : "timepicker",
                        placeholder : '&nbsp;'
                    });
                }

                return nRow;
            },

            "sAjaxSource"   : "<?= $aSourceList; ?>/startdate/<?= $this->startdate; ?>"
        }
    );
    });
    $('.ui-datepicker-close').live('click', function (e){
        e.preventDefault();
        $('#scheduleTable tbody td input').parents("form").submit();
    });

$.editable.addInputType('timepicker',{
        /*create input element*/
        element:function(settings,orginal){
            var form = $(this),
            input = $('<input type="text">');
            form.append(input);
            return (input);
        },

        plugin:function(settings,original){

            /*Don't cancel inline editing onblur to allow clicking datepicker*/
            settings.onblur = 'nothing';
            $("input",this).filter(":text").timepicker(
            {   timeFormat: 'hh:mm',
                'hourMin':6,
                'hourMax':21,
                'showSecond': false,
                'hourGrid':2,
                'minuteGrid':10

            }
        );
        }
    });

I have written a code to integrate timepicker with editable which is being used to make all coulmns except the hidden id coulmn and the first shown coulmn editable . I couldn't get the fnupdate make my edited coulmn to be updated to the new value when it is posted to server side . I am able to get the posted values for server side processing but the clientside is not gettting updated by fnupdate .

Please see the code below and try to tell me what i am doing wrong because i am having many pages which function the same way .

    $(document).ready(function() {

        oTable = $('#scheduleTable').dataTable(
        {
            "sDom"          : '<"top"flip>rt<"bottom"<"clear">',
            "bAutoWidth"    : false,
            "bProcessing"   : true,
            bJQueryUI:true,
            "bServerSide": true,
            "bFilter":false,
            "bSort": false,
            "bInfo": false,
            "bPaginate":false,
            "aoColumns":[
                {
                    "bVisible" : false
                },
                {
                },
                {},
                {},
                {},
                {}
            ],
            "fnRowCallback" : function (nRow, aData, iDisplayIndex) {
                $(nRow).attr('id', '' + aData[0]);
                //i starting from one to make the first element in td non editable
                for (i = 1; i < aData.length; i ++) {
                    $('td:eq(' + i + ') ', nRow).editable("<?= $aupdateUrl; ?>", {
                        'callback': function (sValue, y) {
                            var aPos = oTable.fnGetPosition(this);
                            oTable.fnUpdate(sValue, aPos[0], aPos[1]);

                        },
                        "submitdata": function ( value, settings ) {
                            return {
                                "row_id": this.parentNode.getAttribute('id'),
                                "column": oTable.fnGetPosition( this )[2]
                            };
                        },
                        'height': '14px',
                        indicator : 'Saving...',
                        tooltip : 'Doubleclick to edit...',
                        type       : "timepicker",
                        placeholder : ' '
                    });
                }

                return nRow;
            },

            "sAjaxSource"   : "<?= $aSourceList; ?>/startdate/<?= $this->startdate; ?>"
        }
    );
    });
    $('.ui-datepicker-close').live('click', function (e){
        e.preventDefault();
        $('#scheduleTable tbody td input').parents("form").submit();
    });

$.editable.addInputType('timepicker',{
        /*create input element*/
        element:function(settings,orginal){
            var form = $(this),
            input = $('<input type="text">');
            form.append(input);
            return (input);
        },

        plugin:function(settings,original){

            /*Don't cancel inline editing onblur to allow clicking datepicker*/
            settings.onblur = 'nothing';
            $("input",this).filter(":text").timepicker(
            {   timeFormat: 'hh:mm',
                'hourMin':6,
                'hourMax':21,
                'showSecond': false,
                'hourGrid':2,
                'minuteGrid':10

            }
        );
        }
    });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

缱倦旧时光 2025-01-09 06:56:15

我能够解决这个问题。我做错的主要事情是我没有 json 响应,只有来自服务器端 zend 框架操作的一个值。因此,它导致可编辑功能以一种无法运行的方式运行。不要将值(响应)作为新值放入 td 元素中。希望有人发现它有用和平!

I was able to solve the problem .The main thing that i was doing wrong was that i didn't have json response with only one value from my server side zend framework action.Therefore it caused the editable to function in a way that it couldn't put the value(the response) as the new value in the td element. Hope some on find it usefull peace!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文