jQuery中继器不';t在使用ajax生成的部分应用程序中工作

jQuery中继器不';t在使用ajax生成的部分应用程序中工作,jquery,ajax,octobercms,octobercms-plugins,october-partial,Jquery,Ajax,Octobercms,Octobercms Plugins,October Partial,在由ajax在单个页面内生成的几个步骤组成的表单中,我必须在中间步骤中使用 中继器特定的表单代码位于专用部分中 但是jquery.repeater不起作用,当我单击add或delete按钮时,没有任何事情发生,控制台中甚至没有一条javascript错误消息 如果我在页面中直接使用这个部分,而不使用ajax加载,它就可以工作 注意:我在我的ajax处理程序方法中使用了pushing partial updates方法 返回[ “#myDiv”=>this->renderPartial('mypa

在由ajax在单个页面内生成的几个步骤组成的表单中,我必须在中间步骤中使用

中继器特定的表单代码位于专用部分中

但是jquery.repeater不起作用,当我单击add或delete按钮时,没有任何事情发生,控制台中甚至没有一条javascript错误消息

如果我在页面中直接使用这个部分,而不使用ajax加载,它就可以工作

注意:我在我的ajax处理程序方法中使用了pushing partial updates方法

返回[
“#myDiv”=>this->renderPartial('mypartial'))
];

欢迎大家帮忙

这里是我使用的代码

和脚本声明在我的布局底部

...
<!-- Scripts -->
<script src="{{ [
    'assets/javascript/jquery-3.2.1.min.js',
]|theme }}"></script>
{% framework extra %}
{% scripts %}
</body>
</html>
最后,为了进行比较,在基本页面中工作的代码

title = "repeater-test"
url = "/repeater-test"
layout = "dashboard"
is_hidden = 0
==
function onStart()
{
    $this->addJs('assets/javascript/node_modules/jquery.repeater/jquery.repeater.min.js');
    $this->addJs('assets/javascript/my-repeater.js');
}
==
<form class="repeater">

    <div data-repeater-list="group-a">

      <div data-repeater-item style="display:none;">
        <input type="text" name="text-input" />
        <input data-repeater-delete type="button" value="Delete" />
      </div>

      <div data-repeater-item>
        <input type="text" name="text-input" />
        <input data-repeater-delete type="button" value="Delete" />
      </div>

    </div>

    <input data-repeater-create type="button" value="Add" />

</form>
title=“中继器测试”
url=“/repeater test”
布局=“仪表板”
_是否隐藏=0
==
函数onStart()
{
$this->addJs('assets/javascript/node_modules/jquery.repeater/jquery.repeater.min.js');
$this->addJs('assets/javascript/my repeater.js');
}
==

好的,我找到了一个解决方案,虽然不是很优雅,但很有效

在ajax中加载带有repeater的部分时,页面似乎忘记了在页面级别使用
addJS
声明的脚本,因此我在部分末尾直接使用
声明了脚本,它可以正常工作


尝试向脚本中注入
{%put scripts%}
但不起作用

好的,我找到了一个解决方案,虽然不是很优雅,但可以工作

在ajax中加载带有repeater的部分时,页面似乎忘记了在页面级别使用
addJS
声明的脚本,因此我在部分末尾直接使用
声明了脚本,它可以正常工作


试图用
{%put scripts%}
注入脚本,但不起作用

使用JqueryRepeater就像在地狱里工作一样。从视觉上看,这是非常棒的,但是编写一些基本代码以外的东西就像每次踢-gg-一样

jQuery似乎不能很好地检测每行的新字段,但是使用纯JavaScript是可能的

例如,要更改新生成的输入的值

Document. getElementsByName ( "your-data-repeater-list[1][field_name]")[0].Value =  "My new value";
其中[1]是新的中继器编号

我已经花了好几天(甚至好几夜!)处理这个组件,只要有耐心,就可以做任何你想做的事情


玩得开心

使用JqueryRepeater就像在地狱里工作一样。从视觉上看,这是非常棒的,但是编写一些基本代码以外的东西就像每次踢-gg-一样

jQuery似乎不能很好地检测每行的新字段,但是使用纯JavaScript是可能的

例如,要更改新生成的输入的值

Document. getElementsByName ( "your-data-repeater-list[1][field_name]")[0].Value =  "My new value";
其中[1]是新的中继器编号

我已经花了好几天(甚至好几夜!)处理这个组件,只要有耐心,就可以做任何你想做的事情


玩得开心

您是否尝试过使用
{%scripts%}
而不是
{%put scripts%}
?没有,但根据10月份的cms文档,这似乎很奇怪
此标记应在给定页面周期内仅出现一次,以防止重复引用。
并且我已经在我的布局中的
前面使用了
。octobercms slack chat的其他帮助:@pat och:问题出在my-repeater.js中,在DocumentReady上,您正在寻找.repeater元素,但一开始它并不存在。因此,您需要将该函数包装成一个新函数,并在通过Ajax更新后调用该新函数。老实说,我会使用类似vuejs的东西来处理此类内容。使用组件将非常简单。此外,您可以查看jquery repeater是否触发任何自定义事件,然后在运行自定义js之前侦听这些事件,而不是依赖文档。ready()您是否尝试使用
{%scripts%}
而不是
{%put scripts%}
?没有,但看起来很奇怪,根据10月cms文件
此标记应在给定页面周期内仅出现一次,以防止重复引用。
并且我已经在我的布局中的
前面使用了
。octobercms slack chat的其他帮助:@pat och:问题出在my-repeater.js中,在DocumentReady上,您正在寻找.repeater元素,但一开始它并不存在。因此,您需要将该函数包装成一个新函数,并在通过Ajax更新后调用该新函数。老实说,我会使用类似vuejs的东西来处理此类内容。使用组件将非常简单。此外,您可以查看jquery repeater是否触发任何自定义事件,然后在运行自定义js之前侦听这些事件,而不是依赖document.ready()
title = "repeater-test"
url = "/repeater-test"
layout = "dashboard"
is_hidden = 0
==
function onStart()
{
    $this->addJs('assets/javascript/node_modules/jquery.repeater/jquery.repeater.min.js');
    $this->addJs('assets/javascript/my-repeater.js');
}
==
<form class="repeater">

    <div data-repeater-list="group-a">

      <div data-repeater-item style="display:none;">
        <input type="text" name="text-input" />
        <input data-repeater-delete type="button" value="Delete" />
      </div>

      <div data-repeater-item>
        <input type="text" name="text-input" />
        <input data-repeater-delete type="button" value="Delete" />
      </div>

    </div>

    <input data-repeater-create type="button" value="Add" />

</form>
Document. getElementsByName ( "your-data-repeater-list[1][field_name]")[0].Value =  "My new value";