【问题标题】:PHP (CakePHP) - Recognizing created form elements by JavaScriptPHP (CakePHP) - 通过 JavaScript 识别创建的表单元素
【发布时间】:2014-01-29 05:47:24
【问题描述】:

我正在开发一个 CakePHP 应用程序。在我的应用程序中,页面有一个表单标签,里面没有元素。表单元素(输入等)是使用 JavaScript 动态创建的。因此,在某些事件之后,我创建了所需的元素并将它们附加到父节点。结果是一个包含元素的表单。

for (var i = 0; i < targets.length ; i++) {
        var edt = document.createElement("input");
        edt.setAttribute("type","text");
        edt.setAttribute("id","edt_"+targets[i].id);
        edt.setAttribute("name","edt_"+targets[i].id);
        targets[i].innerHTML = "";
        targets[i].appendChild(edt);
        //Pushing newly created obj to array
        objs.push(edt);
    }

CakePHP 无法使用以下方法处理新创建的元素:

$global_1_user = $this->request->data['edt_1_user'];
$this->set('global_1_user',$global_1_user);

但是,如果我不动态创建元素并将它们包含在我的 HTML 代码中,CakePHP 可以很好地识别这些元素。任何人都可以帮助我吗?为什么会这样?我该如何克服这个问题?有没有其他方法可以实现这一点?

【问题讨论】:

  • 很可能是安全组件阻止了对这些变量的访问。它可以对允许您通过应用程序传输的内容非常有选择性,并且有时可以仅仅因为 HTML 标记中可能存在语法错误而阻止变量。我建议您只使用普通的旧 $_POST$_GET 来访问这些作为解决方法

标签: javascript php html cakephp


【解决方案1】:

您误解了 PHP 和 JavaScript 的工作原理。 PHP 代码永远无法“看到” JavaScript 代码(包括 jQuery)的结果,因为 PHP 运行在服务器上,而 JavaScript 运行在浏览器中。当 JavaScript 开始运行时,服务器已经完成了 PHP。

如果你真的需要在 JavaScript 已经运行后使用 PHP 来做某事,你可以使用 AJAX。

【讨论】:

  • 我知道你在说什么……不是那样的。当我使用: $( "form" ).on( "submit", function( event ) { event.preventDefault(); console.log( $( this ).serialize()); //alert(); }) ;要检查正在发送的值,控制台不会显示任何输入。问题在于 objs.push(edt);。我有一个数组,我将对象存储到其中,并在函数结束时返回对象。推送数组中的元素会将它们从 FORM 节点中删除(而不是物理上的你)。因此,如果我注释掉那行,一切都会好起来的……但是为什么呢?!
  • 我不确定为什么注释掉 objs.push(edt); 会有所改善。对我来说突出的其他可能性是:(1)targets[i].id 应该是一个数字加上“_user”,比如1_user;使用console.log 验证这一点。 (2) 可能objs 不是你想的那样;尝试console.log(objs); 验证它是否符合您的期望。 (3) 新输入是否附加到您的form 元素?如果不是,那将解释提交失败的原因。从上面的代码中很难判断你是否曾经将它附加到 DOM 中。
  • 元素:​ Objs: [input, input, input, input] 此时的objs只是一个对象(元素)数组.后来我用它从 DOM 中删除插入的元素。我将尝试将 ID(作为字符串)推送到数组中,稍后使用 ID(字符串)而不是对象本身来删除它们...
【解决方案2】:

由于某种原因,问题与:

objs.push(edt);

如果我不推送元素(只需注释掉该行),那么它可以正常工作。有人知道这背后的技术原因吗?

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2020-06-20
    相关资源
    最近更新 更多