2014-01-21 25 views
1

我正在研究CakePHP应用程序。在我的应用程序中,页面有一个表单标签,里面没有元素。表单元素(输入等)是用JavaScript动态创建的。因此,在某些事件发生后,我创建了所需的元素并将它们追加到父节点。结果是包含元素的表单。PHP(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的可以识别的元素只是精细。任何人都可以帮助我?这是为什么发生?我该如何解决这个问题?任何替代方法来实现这一目标?

+0

这很可能是安全组件阻止访问这些变量。它可以非常有选择性地允许您通过应用程序进行传输,并且有时可能会阻止变量,因为HTML标记可能存在语法错误。我建议你只需使用普通的老式'$ _POST'或'$ _GET'来访问这些作为 –

回答

3

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

如果您确实需要在JavaScript已经运行之后使用PHP来做某件事,那么您可以使用AJAX来做到这一点。

+0

的工作我知道你在说什么......不是这样。当我使用: $( “形式”)。在( “提交”,函数(事件){ \t \t event.preventDefault(); \t \t的console.log($(本).serialize()); \t \t // alert(); }); 检查发送的值,控制台不显示任何输入。问题是与objs.push(edt);.我有一个数组,我将对象存储在其中,并在函数结束时返回对象。推入数组中的元素将它们从FORM节点(不是物理上的)中移除。所以如果我评论这一行,事情会很好......但为什么? –

+0

我不知道为什么评论'objs.push(edt);'改善了一些事情。其他可能性突出给我的是:(1)'targets [i] .id'应该是数字加“_user”,比如'1_user';使用'console.log'验证这一点。 (2)也许'objs'不是你想象的那样;尝试'console.log(objs);'验证它是你所期望的。 (3)新输入是否被附加到你的'form'元素?如果不是这样,那就可以解释提交失败的原因。从上面的代码很难判断您是否将其附加到DOM中。 –

+0

元素:

0

由于某种原因,这个问题有做:

objs.push(edt); 

,如果我不推的元素(简单地注释掉行),然后正常工作。任何人都知道这背后的技术原因?

相关问题