2014-04-11 54 views
0

早上好。我遇到了一個我正在努力解決的問題,但由於我沒有完全理解JSP/Java平臺,並且沒有完全理解以正確的方式實現我的代碼的方式,我陷入了困境。我有一個ASP背景,所以我對一些概念有點熟悉。如何保持動態添加控件ater回發? Javascript,JSP

我遇到的問題是:我試圖填充動態標籤和文本框以在網頁(JSP)上出現。我已經成功地用一段JavaScript代碼填充文本框,但是,當我提交表單時(在Postback上),我的動態控件已經消失了,但是我的所有靜態控件仍然存在。我需要找到一種方法將我的信息保存在提交的動態控件中。當我有錯誤時表單不提交,但當表單完成渲染時,所有信息和動態文本全部丟失。

我的解決方案:我已經決定使用隱藏域來保存這些信息,但是我不能斷火的隱藏字段的形式提交後請有以下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
<script type="text/javascript"> 
    function validateForm(){ 
     var x=document.forms["myForm"]["fname"].value; 
     if (x==null || x=="" && document.getElementById('two').value==1){ 
      alert("EMPTY"); 
      document.getElementById('text').style.display = "block"; 
      return false; 
     }else{ 
      document.myform.submit(); 
     } 
    } 

    function display(el) { 
     if (el.value == "two") { 
      document.getElementById('text').style.display = "block"; 
     }else { 
      document.getElementById('text').style.display = "none"; 
      document.getElementById('dynbox').value = ''; 
     } 
    } 
</script> 
</head> 
<body> 

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post"> 
    <label >First Name</label> <input type="text"/> 
    <div> 
     <input type="radio" name="radio1" id="one" value="one" onchange="display(this);"/>Eligible 
    </div> 
    <div> 
     <input type="radio" name="radio2" id="two" value="two" onchange="display(this);"/>Not Eligible 
    </div> 
     <div id="text" class="glassy" name="mytext" style="display:none;">Other: <input type="text" id="dynbox"/> 
    </div> 
    <div> 
     <input type="hidden" name="mytext" value="${mytext}" /> 
     <br></br> 
     <input type="submit" onclick="validateForm()" value="Submit"/> 
    </div> 
</form> 

</body> 
</html> 

看看我所試圖做的選擇「不合格」選項並在文本框'mytext'中鍵入一些文本,然後按提交。一旦我按提交,並且如果沒有填寫名字文本框,那麼我想觸發我的隱藏文本框,這樣我就不會在我的動態創建的文本框中丟失我的信息。

我希望這是有道理的。我不確定如何在JSP中執行操作。有人可以提供關於如何獲得預期結果的指導嗎?回發後保持動態控制?

在此先感謝。

+0

使用Ajax提交表單而不是常規的HTML提交。 – developerwjk

+0

對不起,我還不太瞭解AJAX!但會看看它的一些文檔。 – Naina

回答

1

第一件事:不要讓名稱JavaJava-Script混淆你。他們幾乎沒有任何共同之處。你在這裏使用的只是Java腳本(沒有Java,任何地方都沒有JSP)。

無論如何,我認爲這是您的validateForm()函數不起作用的條件。 我測試了一點點,但這些變化的工作原理:

表單

<form name="myForm" action="test.html" method="get" onsubmit="return validateForm();"> 
     <label >First Name</label> <input type="text" id="firstName"/> 
     <div> 
      <input type="radio" name="radio1" id="one" value="one" onchange="display(this);"/>Eligible 
     </div> 
     <div> 
      <input type="radio" name="radio2" id="two" value="two" onchange="display(this);"/>Not Eligible 
     </div> 
     <div id="text" class="glassy" name="mytext" style="display:none;">Other: <input type="text" id="dynbox"/> 
     </div> 
     <div> 
      <input type="hidden" name="mytext" value="${mytext}" /> 
      <br></br> 
      <input type="submit" value="Submit"/> 
     </div> 
    </form> 

我只是改變了第一輸入並賦予它一個ID(因爲我無法找到ID「 fname'),所以我們可以用JavaScript訪問它。

接下來就是您的提交按鈕。你有一個額外的onclick="validateForm()";那裏 - 確實調用validateForm函數,但不聽返回的值(它執行函數..沒有更多)。所以onsubmit="return validateForm()"就夠了。

您的驗證功能

 function validateForm() { 
      var x = document.getElementById('firstName').value; 
      if ((x == null || x == "")) { 
       alert("EMPTY"); 
       // document.getElementById('text').style.display = "block"; 
       return false; 
      } else { 
       return true; 
      } 
     } 

x現在可以通過元素的ID檢索(我更容易找到)。不管怎麼樣,如果條件是存在的問題之一。在您的表單中,您將單選按鈕'two'的值設置爲two。但在if條件,你問如果可能是1 ......哪(根據我的理解)永遠不會發生。我只是刪除它,告訴你,你的功能是這樣的。如果您要檢查的第二個單選按鈕的狀態,你可以這樣測試:

if(document.getElementById('two').checked == true) 

甚至更​​好

if(document.getElementById('two').checked) 

最後一兩件事:在你的else語句,你可以簡單地返回的true而不是調用submit ..因爲在這裏:

onsubmit="return validateForm();" 

你問你validateForm()功能,讓您無論是true然後提交或false然後停止提交。

哦,最後一件事情(這是最後一次,許):Java和Java的腳本處理訂單的所有&&||:第一'x == null'將進行測試,然後x=="" && document.getElementById('two').value==1將一起評估(& &與||)有更強的綁定。僅供您參考:)

+0

非常感謝。我會嘗試你的所有建議,並讓你知道它是什麼! – Naina

+0

謝謝,我得到了這個工作!你已經回答了我的問題。非常感謝。當我調用js函數時,我基本上必須非常小心這個id。 – Naina

+0

太好了,我很高興你能工作。我知道你的意思,與所有這些ID和類的工作可以變得相當混亂:) – GameDroids