RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1331975
Accepted
Алексей Шиманский
Алексей Шиманский
Asked:2022-09-25 16:25:24 +0000 UTC2022-09-25 16:25:24 +0000 UTC 2022-09-25 16:25:24 +0000 UTC

为什么将变量放在 pjax 后面会影响 DatePicker?

  • 772

有一个简单的代码:

Pjax::begin(['id' => "test-grid-pjax", 'enablePushState' => false, 'enableReplaceState' => false]);

echo GridView::widget([
    'id' => "test-grid",
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => $columns,
]);

Pjax::end();

并且有列的定义。它们被放置在一个变量中:

$columns = [
    'id',
    [
        'attribute' => 'start_guarantee_period',
        'value' => function ($model) {
            return $model->start_guarantee_period;
        },
        'filter' => kartik\date\DatePicker::widget(['value' => $searchModel->start_guarantee_period, 'name' => 'ItemSearch[start_guarantee_period]', 'pluginOptions' => [
                'format' => 'dd.mm.yyyy',
                'todayHighlight' => true
            ],
        ]),
    ],
];

DatePicker从 kartik 使用,即这个 有DatePicker日期选择器和重置图标。

  • 如果变量的初始化$columns放在Pjax中,即 在标签之后Pjax::begin,您可以点击日期图标,选择一个日期,数据将被过滤。然后再次单击,选择日期,过滤掉等。
  • 如果变量的初始化$columns放在Pjax后面,即 在标签之前Pjax::begin,您只能选择第一次的日期。重新加载表格后,单击图标不会触发任何事件。刚死。

是的,JS 在内容重新加载后脱落。是的,您可以通过将$columns其放置在标签内Pjax或重新加载表格后,执行 js 代码$('#w0-kvdate').kvDatepicker(window.kvDatepicker_33d8ead7);重新启动选取器来修复它。


主要问题是:为什么会发生这种魔术?为什么服务器上上述特定PHP代码中变量的位置会以某种方式影响JS的行为?我知道如果有一个echo变量,它会在JSpjax中挂起监听器后缓冲这个输出和输出。但在这里它只是改变了变量定义的位置。它如何影响?为什么它停止工作?

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    user467825
    2022-04-03T15:53:48Z2022-04-03T15:53:48Z

    一切都非常简单。当你取出Columnsfor pjax,然后也连接在里面DatePicker,那么所有loadable for它的工作都会在js-скрипты连接之前</body>。

    <html>
    <head>
    ..тут подключаются .css
    </head>
    <body>
    
    <script src=""></script>
    </body>
    </html>
    

    并且css-селекторы它们都注册在特定的类中。

    var initDPRemove = function () {
    }, initDPAddon = function () {
    };
    (function ($) {
        "use strict";
        $.fn.kvDatepicker = $.fn.datepicker.noConflict();
        initDPRemove = function (id, range) {
            var $id = $('#' + id), $el = $id.parent(), $input;
            $el.find('.kv-date-remove').on('click.kvdatepicker', function () {
                if (range) {
                    $el.find('input[type="text"]').each(function () {
                        $(this).kvDatepicker('clearDates').trigger('change');
                    });
                } else {
                    $el.kvDatepicker('clearDates');
                    $input = $el.is('input') ? $el : $el.find('input[type="text"]');
                    $input.trigger('change');
                }
            });
        };
        initDPAddon = function (id) {
            var $id = $('#' + id), $el = $id.parent(),
                pickers = '.input-group-addon:not(.kv-date-picker):not(.kv-date-remove)' +
                    ',.input-group-text:not(.kv-date-picker):not(.kv-date-remove)';
            $el.find(pickers).each(function () {
                var $addon = $(this);
                $addon.on('click.kvdatepicker', function () {
                    $el.kvDatepicker('hide');
                });
            });
            $el.find('.input-group-addon.kv-date-picker').on('click.kvdatepicker', function () {
                $id.focus();
            });
        };
    })(window.jQuery);
    
    

    正如您自己所写的那样-在pjax一切正常之后,bind这些类将消失,因为它们实际上将从 . 消失DOM,然后它们将再次添加到那里,但没有bind. 但是如果你Columns在初始化之后插入,Pjax那么在每次加载内容后,它的操作所需要的一切js-скрипты都会重新连接,pjax因为<script scr="></script>它会在 -container 中注册,因此,将再次调用pjax初始化,并且所有的类都在-script 将再次挂起。datepickerjsbind

    所以要么你仍然把它转移到$columns里面pjax- 要么kartik重写 -ovsky json :)bindbody

    $('body').on('click', '...', function(){
    });
    
    • 2

相关问题

  • mysqli 类的对象无法转换为字符串

  • 您的系统中缺少 ext-http *,您的系统中缺少 ext-mysql_xdevapi *

  • 如何从csv中删除bom?

  • 当我按下 Enter 键时,如何让 PhpStorm 的 Emmet 插件触发,就像 VS Code 一样?

  • 注释在 Symfony5 中不起作用

  • 搜索最近的地理位置点

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5