在ie8的javascript中修改表格行的innerHTML?

时间:2014-08-27 03:19:33

标签: javascript html vb.net internet-explorer-8

我正在尝试在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 ;;

我可能错过了其他一些错误,但我找不到任何错误。

0 个答案:

没有答案