2012-01-30 65 views
1

我有幾個關於表單和PHP的問題,但是如果我應該把它們放到不同的帖子中,那麼我會。關於表單和php的問題(清除表單,實時刷新,多行)

這裏是我的表單代碼:

<form id="t-form" name="tForm" action="translate.php" method="POST"> 
      <div id="t-bar"> 
       <div class="t-select"> 
        <select name="start-lang" id="choice-button"> 
         <option value="english">English</option> 
        </select> 
        <label>into</label> 
        <select name="end-lang" id="choice-button" onChange="document.forms['tForm'].submit();"> 
         <option value="caps"<?php if ($resLang == 'caps') echo ' selected="selected"'; ?>>CAPS</option> 
         <option value="lowercase"<?php if ($resLang == 'lowercase') echo ' selected="selected"'; ?>>lowercase</option> 
        </select> 
        <input type="submit" id="t-submit" value="Translate"> 
       </div> 
      </div> 
      <div id="t-main"> 
         <textarea id="txt-source" name="t-src" autofocus="autofocus" placeholder="Type in what you would like to convert…" onChange="document.forms['tForm'].submit();"><?php echo $source; ?></textarea> 
         <input type="button" id="t-clear" onclick="this.form.elements['t-src'].value=''"> 

         <textarea id="txt-result" name="txt-result" readonly disabled="disabled" placeholder="result..."><?php echo $result; ?></textarea> 
         <input type="button" id="t-copy" name="t-copy"> 
      </div> 
     </form> 

問題1:我現在有onclick="this.form.elements['t-src'].value=''"按下按鈕時清除一個文本框。是否有可能具有相同的屬性清除我的表單中的兩個textareas?我似乎無法找到任何地方用1個按鈕清除2個元素的答案。我不想清除表單,因爲我想保留選定的下拉值,這就是爲什麼我這樣做。

問題2:我該如何去實現結果textarea的實時刷新,以便用戶可以簡單地鍵入並查看結果?我已經看過所需的ajax和jquery,並且很困惑,因爲大多數不會顯示如何輸出到表單元素,只輸出到div。 (類似於Google的翻譯

問題3:我意識到,如果用戶確實在textarea的新行,當他們提交翻譯,這讓他們有一個PHP頭錯誤。任何想法如何我可以避免這一點?這是我在表單中使用的translate.php文件頭:

header("location: /?txt-result=$result&t-src=$textSource&end-lang=$outputLang"); 

我只是想做到這一點作爲一個學習excersise,真的希望任何指導或回答的三個問題。非常感謝您的幫助!

+1

對於第三個問題,你將不得不爲每個變量使用urlencode($ var)。其他兩個更復雜。並在第一個,你寫「我目前有......清除一個文本框」,一些文字在那裏失蹤? – 2012-01-30 14:49:53

+0

感謝urlencode提示,工作就像一個魅力!關於問題1,我繼續解決這個問題,謝謝! – MCG 2012-01-30 15:07:19

+0

你想如何識別你想清除的文本框?他們應該有一類他們的owm?或者你知道他們的ID? – 2012-01-30 15:09:23

回答

0

答1:讓你的onclick事件調用它清除那些值,你的函數:

<script type="text/JavaScript"> 
    function clearTextareas() 
    { 
     this.form.elements["t-src"].value = ""; 
     this.form.elements["txt-result"].value = ""; 
    } 
</script> 

<input type="button" id="t-clear" onclick="clearTextareas()">  

答案2 :在源文本區域中添加一個onkeydown事件,該事件執行翻譯(或任何需要執行的操作),然後將結果放入r esult textarea的:

<script type="text/JavaScript"> 
    function translateText() 
    { 
     var text = this.form.elements["t-src"].value; 
     // do something 
     this.form.elements["txt-result"].value = text; 
    } 
</script> 

<textarea id="txt-source" name="t-src" autofocus="autofocus" placeholder="Type in what you would like to convert…" onkeydown="translateText()"><?php echo $source; ?></textarea> 

答3:或許在form元素的onsubmit事件,將消毒從文本區輸入。看看JavaScript的encodeURIComponent。也許這會適合你:

<script type="text/JavaScript"> 
    function sanitize() 
    { 
     this.form.elements["t-src"].value = encodeURIComponent(this.form.elements["t-src"].value); 
    } 
</script> 
+0

非常感謝您的支持!答案1就像一個魅力。我沒有考慮做一個功能,包括兩個電話,所以我會牢記這一點! ///答案2有效,但會導致刷新。我會更多地關注Ajax,所以我不必刷新頁面。 ///答案3我從來沒有聽說過,所以我會去閱讀。 ///再次感謝您花時間回答! – MCG 2012-01-30 15:59:51

+0

我爲答案2發佈的代碼不應該導致刷新。如果您用於執行翻譯的代碼位於某個外部服務器端腳本(我假設爲PHP)中,那麼是的,您將需要使用AJAX調用腳本而不刷新,但是您可以在該位置進行AJAX調用它在哪裏說'//做點什麼'。肯定會研究AJAX,因爲您在將來的工作中無疑需要它。我甚至會建議使用庫或甚至編寫自己的代碼,以減少進行AJAX調用所需的大量代碼。 – Travesty3 2012-01-30 16:05:44

1

問題1

你應該有:

onclick="clearTextboxes();" 

,並在JavaScript是這樣的:

//if you want to delete all the inputs that are of type text 
function clearTextboxes(){ 
    var inputs = document.getElementById('t-form').getElementsByTagName('input'); 
    for (var control in inputs){ 
     if(inputs[control].getAttribute('type') == 'text'){ 
     inputs[control].value = ''; 
     } 
    } 
} 

問題2

它過於寬泛,把這裏作爲答案,你應該真的看jQuery的$ .ajax,並創建一個具體的不同的問題疑惑。

問題3

使用PHP進行urlencode()函數