首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >cakephp 3中的侦听器有什么替代方案?

cakephp 3中的侦听器有什么替代方案?
EN

Stack Overflow用户
提问于 2020-04-12 06:54:03
回答 1查看 640关注 0票数 0

我在cakephp3.7中使用javascript onchange事件侦听器时遇到了问题。事实上,我有一个用cakephp3.7构建的电子商务web应用程序,运行良好。现在,我想增强网站的销售提交表单,通过动态加载额外的字段,根据卖家选择的产品的类别来填充这些字段。这意味着,如果卖家从类别输入字段中选择electronic,那么现在将显示以前在CSS中样式为displaynone的电子exta字段。电子附加字段与id=elctronic如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="electronic">
<?php echo $this->Form->control('subcategorie',['label'=>'choose sub category', 'class'=>'form-control', 'option'=>['Computer','Phone','Multimedia'],'empty'=>'choose'); ?>
<?php echo $this->Form->control('brand',['class'=>'form-control', 'placeholder'=>'the brand']); ?>
<?php echo $this->Form->control('model',['class'=>'form-control', 'placeholder'=>'the model']); ?>
</div>

然后,如果产品是关于clothes的,则electronic输入字段将被隐藏,衣服额外字段将以id=clothe显示如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <div id="clothe">
    <?php echo $this->Form->control('Gender',['label'=>'What gender?', 'class'=>'form-control', 'option'=>['Males','Females'],'empty'=>'choose'); ?>
    <?php echo $this->Form->control('Size',['class'=>'form-control', 'placeholder'=>'Size']); ?>
    <?php echo $this->Form->control('model',['class'=>'form-control', 'placeholder'=>'the model']); ?>
    </div>

使用事件侦听器的类别输入字段如下所示,应该调用javascript函数extraForm(),但没有调用,问题是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php echo $this->Form->control('category',['id'=>'categ','label'=>'choose category', 'class'=>'form-control', 'options'=>['electronics','clothes'],'empty'=>'choose'),'onchange'=>'extraForm("categ"); ?>

然后,在ProductsController的add()方法的布局中,我将extraForm()函数设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
function extraForm(s1){
 var s1=documentgetElementById(s1);
 var s2=documentgetElementById("electronics");
 var s3=documentgetElementById("clothes");
  if(s1.value == "electronics"){
    s2.style.display = "bloc"
} else {
    s3.style.display = "bloc"
}
}
</script>

已经三天了,因为我不知道我错过了什么。因此,如何在cakephp3.7中实现由所选选项触发的额外输入表单的动态加载。

**

  • 第一编辑

**

正如我在评论中所说,我简化了这个问题,使之可以理解。完整的上下文是,我有两个标准字段categorysubcategory。当用户选择一个类别时,AJAX字体会向用户显示一个可供选择的子类别列表。My AJAX是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).ready(function(){

$('#getSubCat').change(function(e){

    $.ajax({
        type: "POST",
        url:  "/products/getsubsaterogie",
        data: {categ: $(this).find('option:selected').text()},
        dataType: 'json',
        cache: false,
        headers : {
            'X-CSRF-Token': $('[name="_csrfToken"]').val()
        },
        success: function(data){
            console.log(data);
            let subcat = $('#subcategories')

            for (let sc of data) {
                console.log(sc.subcategorie)
                $('<option />', {value: sc.subcategorie_id, text: sc.subcategorie}).appendTo(subcat);
            }
        }
    });

    e.preventDefault();
})

)类别输入字段是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <?php echo $this->Form->control('categorie_id', ['id'=>'getSubCat', 'options' => $categories, 'label' => __("What category ?"), 'class'=>'form-control', 'empty' => '(choose)']); 
                                               ?>

在用户选择了一个类别之后,AJAX从数据库中获取的子类别列表在这个表单输入中显示得很好,这就是onchange被设置为调用extraForm()函数的地方,但是没有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <?php echo $this->Form->control('subcategorie_id', ['id'=>'subcategories', 'label' => __("What subcategory ?"), 'class'=>'form-control', 'options'=> [],'empty' => '', 'onchange' => 'myFormShow("getSubCat","subcategories")']); 
                                               ?>

在选择了子类别之后,相关的额外表单就不会出现,但是如果我在CSS中手动将display更改为bloc,它就会显示,这意味着javascript函数不会被调用onchange,我甚至使用了onselect,但仍然没有。而javascript函数extraForm实际上正在接收像extraForm(s1, s2)这样的2个参数。这才是我真正的背景。

我真的被困在这里了。任何帮助都是非常感谢的,谢谢。

-根据格雷格的要求编辑:,根据格雷格的评论,这是我的蛋糕代码,在子类别中生成列表。我不知道所有这些细节都是必要的,因为我认为这是cakephp 3有关javascript事件侦听器的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function getsubsaterogie(){
            if($this->request->is('ajax')){
                $d = $this->request->getData();
                $subcat = '';
                $cat = TableRegistry::get('Categories')->find()
                ->where(['categorie' => $d['categ']])
                ->select('id')
                ->first();

                if(!empty($cat)){
                    $subcat = TableRegistry::get('Subcategories')->find()
                    ->where(['categorie_id' => $cat->id])
                    ->all();
                }

                echo json_encode($subcat);
                exit();
            }
        }

提前谢谢,致以最诚挚的问候!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 05:59:11

不知道真正的问题是什么,总是让人望而生畏,因为这不是我第一次尝试使用ajaxcakephp。在Greg 上,当他说“子类别根本不会显示”时,就能证明他有很好的经验。事实上,两天后,当我努力寻找真正的问题时,就开始了,

  • 我清空了缓存,
  • 我删除了浏览器cookie

突然,整个应用程序开始出乎意料地表现出来,

  • 子类别不再显示
  • 我为网站前端的动画广告制作的基于jQuery的动画代码也变得越来越奇怪。

这些都让我想到了jQuery问题,事实上,这才是真正的问题。我使用了3个不同版本的jQuery,所有3个版本都是我的项目所必需的。3 jquery版本是悄然冲突的,没有给我任何提示来排除问题。现在我知道这是jquery问题了,我使用了jQuery noConflict方法(在此链接中描述)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <?= $this->Html- >script('http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js') ?>
    <?= $this->Html->script('lecker/ajax/getSubCategorie.js') ?>
    <script>
        var jQuery_1_12 = $.noConflict(true);
    </script>
<?= $this->Html->script('https://code.jquery.com/ui/1.12.1/jquery-ui.js') ?>
// This for the second jquery version

描述并不像看上去那么简单,但是堆栈过流上的其他问题也帮助了我。

最终,问题不在于我们是否仍然可以使用cakephpVersion3FormHelper使用enchange事件,而是关于jquery在ajax代码中使用正确的$变量来获取子类别的问题,这是没有结果的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61173359

复制
相关文章
服务网格的简化替代方案有哪些?
服务网格是一项热门技术,有时甚至被吹捧为微服务成功的必要条件。但是,与许多抽象一样,服务网格可以节省时间,但不会节省学习时间。事实上,许多小型平台团队对服务网格增加的复杂性感到不知所措,尤其是在涉及到长时间的操作时。
用户5166556
2023/03/18
6960
服务网格的简化替代方案有哪些?
金山文档有什么替代品
最近好多朋友都在问我,哪些办公软件可以替代掉金山文档,也就是我们常说的WPS office,为什么会有这么多朋友问呢?我总结了一下,大致就是WPS的广告太多,以及可能会造成的数据泄露,文件限制等问题,今天我也准备了4款可以替代WPSoffice来分享给大家。
用户10264843
2023/05/05
1.1K0
为什么Spring和IDEA不推荐使用@Autowired注解,有哪些替代方案?
在使用Spring框架和JetBrains IDEA集成开发环境(IDE)进行Java开发时,你可能经常会遇到@Autowired注解。@Autowired是Spring框架中用于实现依赖注入的核心注解之一。然而,近年来,Spring和IDEA都不再推荐使用@Autowired注解,并提出了更好的替代方案。本文将详细分析为什么Spring和IDEA不推荐使用@Autowired注解,并介绍这些替代方案。
网络技术联盟站
2023/07/03
1.4K0
为什么Spring和IDEA不推荐使用@Autowired注解,有哪些替代方案?
为什么不推荐使用 MyBatis 二级缓存,有哪些替代方案?
MyBatis 是一个流行的持久层框架,它提供了丰富的功能来简化数据库访问操作。其中包括一级缓存和二级缓存,用于提高系统性能。虽然 MyBatis 的二级缓存看起来非常诱人,但在实际应用中并不推荐使用。本文将详细探讨为什么不推荐使用 MyBatis 二级缓存,并提供一些替代方案。
网络技术联盟站
2023/07/03
9080
为什么不推荐使用 MyBatis 二级缓存,有哪些替代方案?
onpropertychange替代方案[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 onpropertychange替代方案
全栈程序员站长
2022/08/01
1.3K0
Base:Acid的替代方案
作者:DAN PRITCHETT 译者:java达人 来源:https://queue.acm.org/detail.cfm?id=1394128(点击阅读原文前往) 在数据库分区中,以一致性换取可
java达人
2018/03/26
2.3K0
Base:Acid的替代方案
网络推广有什么方案?
也就是进行seo关键词优化。相信大家都听说过竞价关键词优化,就如你在百度搜索引擎购买关键词排名,设定一些关键词,当用户搜索这些关键词的时候,百度就帮你把你的网站列在首页。
耐思智慧
2019/09/11
1.6K0
网络推广有什么方案?
Web 框架的替代方案
在本系列第二部分中,Noam 提出了一些模式,说明如何直接用 Web 平台作为框架提供的一些解决方案的替代方案。
深度学习与Python
2022/04/19
2.6K0
Hugo .GitInfo 的替代方案
今天有人问我博客页脚 footer 里的 git hash 是怎么显示的,就是页面底部里的 69d6ffe 这一串数字。
eallion
2022/12/20
1.9K0
Hugo .GitInfo 的替代方案
探讨if...else的替代方案
假设我们要做一个计算器,实现加减乘除的需求。使用if...else...语句实现代码如下:
互联网金融打杂
2022/08/01
2.2K0
探讨if...else的替代方案
Flutter 中FlatButton的替代方案
最新版本的Flutter已将FlatButton标记为过时,我们可以使用 TextButton 或 ElevatedButton 来进行替代,FlatButton 与替代组件的参数会有差异。
xiangzhihong
2023/07/09
6420
企业用途的 V** 替代方案
虚拟专用网络 (VPN) 是最常用的远程网络连接解决方案之一。但是,它有许多限制,会对网络性能和安全性产生负面影响。使用更专业的远程解决方案替代 VPN ,可以提高安全性,同时还可以提高远程访问的质量和远程工作人员的工作效率。
Loki
2023/01/10
2.2K0
企业用途的 V** 替代方案
CentOS 8/6 Linux 生命终结,2022 年最好的替代方案是什么?
◆ 前言 Red Hat 最近宣布,CentOS 8 Linux将不再支持并在 2021 年底停止使用。取而代之的是滚动版本 CentOS Stream 作为 RHEL 的下游分支于 2019 年推出,将持续排查漏洞,让上游版本更加稳定和安全。 但是,运行 CentOS 7 的服务器不会受到影响。他们将与 RHEL 7 生命周期并行更新。RHEL 7 将在 2024 年结束其最后一个维护周期。 但是,如果您使用的是 CentOS 8,那么 2022 年有哪些替代方案?不幸的是,即使您找到了,服务器应用程序的
IT大咖说
2022/03/08
6.4K0
Electron中remote模块的替代方案
在Electron12时候被废弃,使用必须配置enableRemoteModule
码客说
2023/09/14
2K0
国产化替代方案_excel表格为什么替换不了
PHPExcel上一版本1.8.1于2015年发布。该项目已不再维护,可以使用,但是不建议再使用。所有用户都应该迁移到其直接后继者PhpSpreadsheet或其他替代方案。PhpSpreadsheet打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。
全栈程序员站长
2022/11/04
1.7K0
国产化替代方案_excel表格为什么替换不了
替代Websocket的解决方案:GoEasy
GoEasy这个库的适用场景:同Websocket的场景 在后台使用例如Java进行逻辑处理后将变量的值传入前台,前台不用发起请求即可接收后台发布的数据, 整个流程与Redis的Pub和Sub过程类似 整个交互类似Socket的长连接,前台首次调用不需要请求后台。 非常适合监控后台参数等场景;
ZONGLYN
2019/08/08
5.5K0
传统 for 循环的函数式替代方案
在 Java 语言的第 1 个版本中就开始引入了传统的 for 循环,它的更简单的变体 for-each 是在 Java 5 中引入的。大部分开发人员更喜欢使用 for-each 执行日常迭代,但对于迭代一个范围或跳过范围中的值等操作,他们仍会使用 for。
IT小马哥
2020/03/18
2.9K0
Java 函数引用 替代方案
通过接口和内部类 举个例子吧 比如new一个线程 c#里是这样 Thread tr = new Thread(new ThreadStart(func)); 其中func是函数名 那么java里可以这样 Thread tr = new Thread() { public void run() {func();} }; 也没有多写多少代码
ApacheCN_飞龙
2019/02/15
8010
5 个 Docker 替代方案
提高容器安全性、Docker 未来的不确定性、技术战略变化和预算问题都可能促使企业寻找 Docker 的替代品作为其容器标准。
我的小碗汤
2023/03/19
2.4K0
5 个 Docker 替代方案
点击加载更多

相似问题

WCFTestClient有什么替代方案吗?

20

CakePHP解析查询结果替代方案

34

Laravel中的CakePHP组件替代方案

11

使用JAX的ArrayList有什么替代方案?

22

Cakephp3.0 TableRegistry的替代方案cakephp2.9

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文