2014-01-21 27 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); 

,如果我不推的元素(簡單地註釋掉行),然後正常工作。任何人都知道這背後的技術原因?

相關問題