2015-06-11 32 views
0

我有這種形式最初有一個選擇元素,但用戶可以添加點擊'添加'時選擇的數量。然後,當用戶提交表單,並有一些無效的輸入(即未填寫的輸入)表單沒有提交(我使用PHP進行表單驗證),並且它只返回原始頁面,只顯示一個選擇,所以我使用jquery並對提交的select數組進行計數,然後像首先選擇的用戶一樣追加select元素。現在問題是如何將附加選擇的值設置爲用戶選擇的值?如何更改附加選擇元素的值

對不起,我不好解釋,這裏是代碼,希望它有助於讓更清晰的畫面:

HTML

<div class='select_container'> 
    <select name='select[]'> 
     <option value='option1'>Option1</option> 
     <option value='option2'>Option2</option> 
     <option value='option3'>Option3</option> 
    </select> 
</div> 

<div class='add'>Add</div> 

JQuery的

$(document).ready(function() { 

    //User can add more select element by clicking 'add' 

    $('.add').click(function() { 
     $('<select name="select[]">' + 
      '<option value="option1">Option1</option>' + 
      '<option value="option2">Option2</option>' + 
      '<option value="option3">Option3</option>' + 
      '</select>').appendTo('.select_container'); 
    }); 

    //When form failed to submit(i.e invalid input), automatically 
    //add the select element as many as the user added at first 

    //get the user select input, make it into array 

    var select = "<?php $select= echo implode(',',$_POST['select']); ?>"; 
    var select_array = select.split(','); 
    var select_length = select_array.length; 

    //after counting length of array, add the amount of select element the user added 

    for (i = 1; i < select_length; i++) { 
     $('<select name="select[]">' + 
      '<option value="option1">Option1</option>' + 
      '<option value="option2">Option2</option>' + 
      '<option value="option3">Option3</option>' + 
      '</select>').appendTo('.select_container'); 
    } 
}); 

我設法選擇元素追加所以當表單無法提交時,用戶不必重新添加select元素,並且我希望在表單未能提交時附加select元素自動設置爲值該用戶選擇。

我試過delegate(),on()和一堆其他的東西,但我仍然無法設置附加選擇元素的值。我只能在html中設置原始第一個選擇的值。

如果有人知道一種方法來設置附加選擇的值,所有的答案和建議都受到歡迎和讚賞。

感謝

+0

如果提交確實在PHP端失敗,您可以將這些數據存儲在會話(示例)中,並在頁面重新加載時使用它們。 – Goikiu

+0

但我希望select元素顯示並顯示用戶選擇的項目。 (場景示例:用戶添加了3個select元素,並且他選擇了:option1,option2,option3,option1)。這將會導致錯誤,因爲選擇了重複的選項,並且它返回到表單頁面,當它返回時,我希望表單具有用戶選擇的4個選擇元素,以便他可能想要更改選項4的最後一個選項,或者用戶不必重新添加選擇並重新選擇。 – Charas

回答

0

假設選擇留相同的,你可以簡單地通過提交表單到同一個頁面(當前頁面),並在你的PHP文件中做到這一點,HTML部分應該是這樣的

<div class='select_container'> 
    <select name='select[]'> 
     <option value='option1'>Option1</option> 
     <option value='option2'>Option2</option> 
     <option value='option3'>Option3</option> 
    </select> 
<?php 
     if(!isset($_POST)&&!empty($_POST['select'])){ 
     for($i=0;$i<sizeof($_POST['select']);$i++){ 
      echo '<select>'; 
      $options=array('option1','option2','option3'); 
      for($j=0;$j<sizeof($options)){ 
       if($options[$j]==$_POST['select'][$i]){ 
        echo '<option 
          value="'.$options[$j].'" 
          selected="selected">'.$options[$j].'</option>'; 
       }else{ 
        echo '<option 
        value="'.$options[$j].'">'.$options[$j].'</option>'; 
       } 
      } 
      echo '</select>'; 
     } 
     } 
?> 
</div> 

<div class='add'>Add</div> 
+1

感謝您的回答,這是一個非常好的答案,但我不認爲我可以將其應用於我的案例,因爲實際上在我的表單中有兩個選擇(州和城市的選擇),對於每個選項州,那裏有一個城市的選擇選項,所以我實際上每次用戶點擊添加按鈕時追加兩個選擇(州和城市)。我需要這樣,當表單未能提交時,它在同一頁面中,州和城市選擇會自動選擇爲用戶選擇的值。我試圖使用你的方法,看看它是否可以工作。 – Charas

+1

其實,我設法通過結合您的答案和@Derenir答案來獲得我需要的。我回應選擇元素並使用jquery進行操作。感謝您的幫助。 =) – Charas

1

你可以做這樣的事情(我假設你張貼的形式返回到同一文件):

// if reloaded after post basically 
if(select.length > 0) { 
    // if there are multiple groups of selects, add class and call each on that 
    $('select').each(function(i) { 
     $(this).val(select_array[i]); 

    }); 

} 

的選擇順序是由於保證了FO的線性性質處理,所以不應該是一個問題。

+0

Thx爲您的答案,這幾乎接近我所需要的,它只改變了第一個原始選擇的值,但對於其他附加選擇,它不會改變,我猜測是因爲其他選擇被追加? – Charas

+0

@Charas,如果它附加或不是一個問題,至少在我把它放在一起的小演示不是。如果你仍然需要解決方案,我可以把JSFiddle放在一起。 – Derenir

+0

我終於能夠通過使用由Bellash提供的方法得到我需要的東西,並且也感謝您使用php在使用php生成後使用您的方法來操作select元素。對不起,我投了正確的答案Bellash,我upvoted你回答,因爲你的答案合併是我所需要的。非常感謝。 – Charas