2012-06-11 41 views
1

如果div包含表單字段,那麼修改div容器的innerHTML對http請求負載的影響是什麼?使用innerHTML修改html元素 - 對httprequest的影響

這是first.html

<html> 
<body> 
     <script type="text/javascript"> 

     function changeDropdown(){ 
      document.getElementById('divId').innerHTML=""; 
      var options = "<select name='suffix' id='suffix'></select>"; 
      document.getElementById('divId').innerHTML=options;   

     } 
    </script> 
    <br><br> 
    <p>testing http header issue</p> 
    <a href="javascript:changeDropdown()">Change dropdown</a> 
    <form name="test" action="second.html" method="post"> 
     <table align="center"> 
      <tr> 
       <td> 
        <label for="name">Name</label> 
       </td> 
       <td> 
        <input type="text" name="name"/> 
       </td> 
      </tr>  
      <tr> 
       <td> 
        <label for="suffix">Suffix</label> 
       </td> 
       <td> 
        <div id="divId"> 
         <select name="suffix" id="suffix"> 
          <option value="Mr" selected=selected>Mr</option> 
          <option value="Mrs" selected=selected>Mrs</option> 
          <option value="Ms" selected=selected>Ms</option> 
         </select> 
        </div> 
       </td> 
      </tr> 
      <tr> 
       <td colspan="2"><input type="submit" value="submit"</td> 
      </tr> 
     </table> 
    </form> 
</body> 

如果我在兩個字段中輸入值,並點擊提交,這是我在Chrome的請求字段看到了價值。 (網絡 - >標題)

**Request Payload** 
     name=Batman&suffix=Mr 

現在再次打開first.html。這次點擊「更改下拉列表」鏈接。這將刪除所有選項。現在輸入一個名稱,然後點擊提交。

這是Chrome的頭

**Request Payload** 
     name=Batman 

參數 「後綴」 從HTTP消失的值(?)PARAMS名單。我已經明確地使用innerHTML將完整的select元素添加回表單。但是由於某種原因沒有得到承認。

有趣的是,如果我向選擇字段添加一個空選項,它會被拾取。 即改變javascript函數

document.getElementById('divId').innerHTML=""; 
var options = "<select name='suffix' id='suffix'><option value=''></option></select>"; 
document.getElementById('divId').innerHTML=options; 

如果有人知道爲什麼會這樣,我能做些什麼來解決這個問題,而無需添加如上虛擬選項,請不要共享。謝謝!

+0

那麼,在你刪除當前內容並給它一個_blank_下拉的情況下,它應該發佈什麼? Chrome的行爲正確,正如我所預期的那樣。你試圖做的是倒退的東西似乎= D – Tejs

+0

innerHTML有一些表單域的問題。一些瀏覽器(不記得哪些),如果select元素添加了innerHTML,則不會顯示任何選項。 JavaScript庫(如jQuery)將爲您處理這些問題。你真的應該使用一個。 – Andre

+0

@Tejs ..我期待的請求對象將具有名稱「後綴」,但值爲空的參數。我試圖做的是......這個頁面最初是由一個struts表單bean填充的。可以說後綴= Mr。現在,如果我點擊更改參數並點擊提交,我期望的是,struts動作表單將後綴重置爲空。但實際發生的是,操作表單在請求中查找名爲「後綴」的param,並且找不到它。所以它保留了舊的價值 - 這不是我想要的。 – RKodakandla

回答

0

我認爲這完全是與事實有關,然後當你重新添加<select>時,你添加它沒有任何可能的選項,因此chrome正在省略該變量(因爲它永遠不會被設置)。

這是由您的空白<option>再次產生所需結果的事實所證實的。

相關問題