2013-09-21 21 views
1

所以我想創造一個用戶將在那裏當然信息的網頁。頁面上有一個添加按鈕,如果他們需要更多字段,則會爲它們添加另一個文本字段。保存信息,而無需使用變量

一旦添加按鈕被按下時,頁面被重置,所有的先前已進入消失的信息。我可以將信息保存在一個數組中,當按下添加按鈕時或將它們保存到一個數組中,然後使用數組中存儲的內容填充字段。

我的問題是:有沒有辦法刷新頁面,並保留在文本字段中的信息,而不需要上面提到的長過程,是否有一些屬性,我可以使用,不會刪除已經以前進入?

+0

當您點擊添加按鈕時,您是否需要刷新頁面?嘗試使用JavaScript - 將輸入從提交更改爲按鈕,並添加一個onclick處理程序。如果每個項目與前一項目相同,則可以對前一個項目進行克隆,在將值附加到HTML文檔之前擦除該值,並根據需要更改名稱字段。 –

回答

0

假設這HTML:

<form id="course-info-form" action="submit-course-info.php" method="post"> 
    Professor name: <input type="text" name="professor"><br> 
    Additional info:<br> 
    <input type="text" name="additional0"><br> 
    <input type="submit" value="Submit"> 
</form> 
<br> 
<button id="add-button">Add Field</button> 

<!-- Use jQuery for DOM manipulation --> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

使用JavaScript/jQuery的:

var courseInfoForm = $('#course-info-form'); 
var addButton = $('#add-button'); 

// Keep track of how many fields there are, so each can have a unique "name" attribute 
var additionalFieldsAdded = 1; 

// Whenever "Add Field" is clicked, create another input field 
addButton.on('click', function() { 
    var newInput = $("<input>", { 
     type: "text" 
     name: "additional" + additionalFieldsAdded 
    }); 
    courseInfoForm.append(newInput, "<br>"); 
    additionalFieldsAdded += 1; 
}); 

我不是在PHP非常好。在你的PHP腳本,使while循環檢查,看看是否isset($_POST['additional0'])和additional1,additional2等,直到你確信有沒有通過更多的附加字段。然後將所有這些額外的細節存儲到一個數組中,並處理它如何看待適合。

至於你原來的問題,我建議用我的解決方案來代替。最好避免不必要的重新加載頁面,如果你所做的只是每次添加一個新表單。

我想你可以在單擊「添加字段」按鈕時捕獲「暫時提交」的信息,然後在PHP腳本循環所有附加字段並每次創建另一個字段時添加一個輸入元素被添加,並將每個「舊」輸入元素的值屬性設置爲「暫時提交」的值。

因此,要回答你的問題,你可以設置一個輸入字段(服務器端)用的默認值:(目前未經測試)

// add-course-information.php 
<?php 
    $addingField = false; 

    // Check for the optional "?do=addfield" parameter 
    if (isset($_POST['do']) && $_POST['do'] == 'addfield') { 
     $addingField = true; 
     $fields = array(); 
     $nextField = 'additional' . count($fields); 

     // Get each piece of POSTed field data 
     while (isset($_POST[$nextField]) && $_POST[$nextField] != '') { 
      array_push($fields, $_POST[$nextField]); 
      $nextField = 'additional' . count($fields); 
     } 
    } 
?> 

<!-- Silly HTML! --> 

<?php 
    // If adding a field, recreate and repopulate all previous fields 
    if ($addingField) { 
     for ($i = 0; i < count($fields); i++) { ?> 
      <input type="text" name="additional<?= $i ?>" value="<?= $fields[$i] ?>"> 
<?php } ?> 
     <input type="text" name="additional<?php echo count($fields) + 1 ?>"> 
<?php } 
    // Otherwise, show the default additional field 
    else { ?> 
     <input type="text" name="additional0"> 
<?php } ?> 

<!-- More awesome HTML! --> 

威力工作...

什麼該網頁是應該做的(如果作品)是:

  1. 在默認情況下,爲用戶提供了初始設置,用只需要1個額外的輸入字段「additional0」。
  2. 當用戶點擊「添加域」 ?do=addfield應張貼補充道,information.php文件(你可以寫的那部分),並在該頁面接收DO =激活addField參數,那麼它知道通過所有循環提交的附加字段,並將它們分別存儲到一個數組中,然後將所有提交的數據輸出回另一個循環的動態生成的元素中。

但我認爲這將會複雜得多,並且不必要地增加了服務器必須執行的處理。如果有人每分鐘敲擊數十萬次的「添加字段」按鈕,最終會讓你的for循環迭代數百萬次,甚至可能會被濫用......(除非對最大字段數施加限制,這很容易。)

但是,如果可用,您還可以利用客戶端的處理能力。

+0

首先:感謝我的輸入,我真的很感激它。 PHP方法是我正在談論的方法,但 我真的很喜歡javascript的方式,我會在我採取PHP路線之前嘗試一下。 – ssturges

+0

如果您使用JavaScript路由,則可以修改PHP腳本的前半部分($ fields,$ nextField和while循環),以便處理添加到客戶端的n個附加字段。 – Jackson

0

你可以使用ajax我認爲...它在後臺運行沒有頁面重新加載完成。

+0

請做一個例子先生 – Ali

1

如果您編碼的是HTML5,則可以使用localStorage來回退到cookie。另外,如果信息應該在會話結束後被刪除,那麼你可以使用sessionStorage來代替。