我正在尝试在HTML中添加创建可编辑表格。因此,当用户点击按钮时,我需要添加行。这是我正在使用的代码。
//remove all old rows.
while (summaryTableElement.firstChild) {
summaryTableElement.removeChild(summaryTableElement.firstChild);
}
//add a new text area in the summary field.
summaryTableElement.innerHTML = "<textarea id='summaryTextBox' value='' onblur='saveSummary()'> </textarea> ";
此代码适用于Chrome和Mozilla。但是,IE不允许编辑innerHTML。这个HTML将显示在VB表单中,所以我有#34;浏览器&#34;和#34; webbrowser&#34;控件可用。这两个控件都使用IE引擎,所以这段代码不起作用。
我尝试过使用firstchild.innerHTML,以便我不直接编辑表格行,甚至这也给了我同样的错误。
我尝试使用WebKitBrowser。但是,这会导致负载异常。显然,控件使用了一些旧方法,并且方法也发生了变化。所以,这种控制也是不可能的。
现在,我很困惑如何解决这个问题?
编辑:
我发现了WebKitBrowser的问题。它特定于x86,而我的项目同时针对x64和x86。工作时将它切换到x86。虽然,webkit浏览器不采用返回键值。所以,我有一个新问题。按Enter键不会在表格单元格中创建新行,而是将事件传递给vb表单。
编辑:
好的,所以我尝试了进一步使用WebKitBrowser。但是,那个控件给了我accessviolatedexception。所以,我现在正考虑回到使用默认的浏览器控件。
至于默认控制,我进一步检查。显然,代码在IE9及以上版本中运行良好。但是,vb.net控件使用了一些奇怪的JS引擎。所以,我只在vb控件中收到错误。
以下是完整的参考代码:
var summaryChanges = "";
var isSummaryClickable = true;
//creates a textbox for editing purpose and include the original summary data.
function modifySummary(id) {
var summaryTableElement; //to get the table cells so that we can access the value
var originalSummary = ""; //to hold the original summary while we create a text box
var loopCounter = 0;
if (isSummaryClickable == true) {
isSummaryClickable = false; //saves event spilling when clicked on the newly created textbox
//get the summary table id saved.
summaryTableElement = document.getElementById (id).childNodes.item(0);
//add existing data to a string to save it for later.
for (loopCounter = 0; loopCounter < summaryTableElement.childNodes.length; loopCounter++) {
originalSummary = originalSummary + summaryTableElement.childNodes.item(loopCounter).childNodes.item(0).innerHTML + "\n";
}
//remove all old rows.
while (summaryTableElement.firstChild) {
summaryTableElement.removeChild(summaryTableElement.firstChild);
}
//add a new text area in the summary field.
summaryTableElement.innerHTML = "<tr><td><textarea id='summaryTextBox' value='' onblur='saveSummary()'> </textarea></td></tr> ";
//set the width of the textbox to allow easy modification
document.getElementById("summaryTextBox").style.width = '600px';
//add original summary text to the text area and set focus
document.getElementById("summaryTextBox").value = originalSummary;
document.getElementById("summaryTextBox").focus();
}
}
// saves the updated summary data back to HTML
function saveSummary()
{
var newHTML = "";
var changesSummary;
var changesSubString = new Array();
var index = 0;
var elementToUpdate;
//get the summary table id saved.
elementToUpdate = document.getElementById("SummaryData"); //.childNodes.item(0);
//get changes from the textbox
changesSummary = document.getElementById("summaryTextBox").value;
//generate string array for separate lines from summaryChanges
changesSubString = changesSummary.split("\n");
//generate new HTML string for the summary fields
//alert(changesSubString.length);
for (index = 0; index < changesSubString.length; index++) {
newHTML = newHTML + "<tr><td class='Text' style='padding-left: 4px;padding-bottom: 4px;' id='SummaryLine" + index + "'</td>" + changesSubString[index] + "</tr>"
}
//update the HTML to the element
elementToUpdate.innerHTML = newHTML;
//allow clicking on summary table
isSummaryClickable = true;
}
function doNothing(id) {
//empty function for future use
return;
}
//this function is called from vb.net script to read the js variable.
//do not change the function definition (name or parameters or return type)
//any change will cause error in vb.net script
function jsInvokedFunction() {
var updatedHTML; // to be used by vb.net invoked function to get updated body
var testVariable = "test";
updatedHTML = document.body.innerHTML.toString();
return updatedHTML.toString();
}
我在行摘要时收到错误.TableElement.innerHTML =&#34; &#34 ;;
我可能错过了其他一些错误,但我找不到任何错误。