我有一個奇怪的錯誤,我無法弄清楚。我有一個由CHART數組數組生成的html表。我試圖實現一個可以讓我改變一行內容的元素。如果我使用調試器並添加一些檢查點,但它不起作用,那麼它工作正常。Javascript表單輸入值更新僅在debbuging條件下成功
功能openModForm
我在JavaScript中創建一個div,我在我的表添加到單元格成一排。
我加載div中的輸入表單html。
JS將從CHART全局變量中獲取當前行中顯示的信息。
我使用當前值填充輸入的值屬性(以便如果用戶不想修改特定值,它將保持不變)。
function openModForm(x)
{
var updatebox = document.createElement("div");
//we keep only one updatebox open at any time, right now i think to attach it to row
updatebox.id = 'updatebox';
//so that the click on updatebox won't trigger the parent (modcell) function which would create more updateboxes
updatebox.addEventListener("click", stopEvent, false);
x.appendChild(updatebox);
//load form html to div
$("#updatebox").load("modform.html");
//populate modform with default values
var rowind = x.parentElement.rowIndex;
var task = CHART[rowind-1][1];
var person = CHART[rowind-1][2];
var start = CHART[rowind-1][3];
var end = CHART[rowind-1][4];//if i add debugger checkpoint here everything works as intended!
document.forms["UpdateForm"]["TaskInput"].value=task;
document.forms["UpdateForm"]["RespInput"].value=person;
document.forms["UpdateForm"]["StartInput"].value=start;
document.forms["UpdateForm"]["EndInput"].value=end;
}
function stopEvent(ev)
{
ev.stopPropagation();
}
接着函數modTask()
它是由形式修改按鈕點擊激活。
它加載表單域中的值並將其替換到我的圖表中。
它也發送一個請求,以便在服務器上更改值。
function modTask()
{
var rowind = document.getElementById("updatebox").parentElement.parentElement.rowIndex;
var taskid = CHART[rowind-1][0];
var task = document.forms["UpdateForm"]["TaskInput"].value;
var person = document.forms["UpdateForm"]["RespInput"].value;
var start = document.forms["UpdateForm"]["StartInput"].value;
var end = document.forms["UpdateForm"]["EndInput"].value;
var chartID=CHART[0][5];
var xhr = typeof XMLHttpRequest != 'undefined' ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhr.onreadystatechange=function()
{
if (this.readyState==4 && this.status==200)
{
document.getElementById("MessageArea").innerHTML=this.responseText;
//set new CHART values
CHART[rowind-1][1]=task;
CHART[rowind-1][2]=person;
CHART[rowind-1][3]=start;
CHART[rowind-1][4]=end;
//remove updatebox from modcell after work is done
var p=document.getElementById("updatebox").parentElement;
p.removeChild(p.childNodes[1]);
}
}
xhr.open("POST", "mod_task.php", true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send("taskid="+encodeURIComponent(taskid)
+"&task="+encodeURIComponent(task)
+"&person="+encodeURIComponent(person)
+"&start="+encodeURIComponent(start)
+"&end="+encodeURIComponent(end)
+"&chid="+encodeURIComponent(chartID)
);
}
的BUG
如果我對openModForm行我有評論據此----一切都會按計劃調試檢查點。輸入字段顯示當前屬於此條目的值。我可以改變領域或讓他們成爲現實。
如果我刪除調試檢查點,那麼表單輸入字段顯示爲空,而實際上,如果我不更改它們,值屬性保持爲空,則會提交空字段。
我不明白這樣的事情是可能的。任何想法這個錯誤是什麼以及它是如何成爲受歡迎的。我嘗試做一些解決方法 - 比如直接從javascript生成表單域,而不是從html中加載它們,然後更新它們的值屬性。但是ID真的很想知道HELL發生了什麼,並且在將來我想改變導入表單的價值時有什麼解決方案。
很好的解釋。 – DomeTune
我很高興很清楚 –
用適用的解決方案很好的清晰解釋。 –