2009-10-09 51 views
0

我有一个选择框:通过所有选择值到PHP

<select name="sub_selected" class="bmarks" id="sub_selected" 
style="width:400px" size="5"> 
      <option value="1">first value</option> 
      <option value="2">second value</option> 
      <option value="4">other vale</option> 
            </select> 

我想所有的值传递给PHP。

我写了下面的代码,但它不工作:

$('#sub_selected').each(function(i, selected){ 
     foo[i] = $(selected).val(); 

       var title  = $('#prop_tile').attr('value'); 
       $.ajax({ 
       type: "POST", 
       url: "add_process.php", 
       data: "title="+ title +"& stages="+ foo, 
       success: function(html){ 
       if (html==1){ 
       $('div.saving').hide(); 
       $('div.success').fadeIn(); 
       }else { 
       $('div.saving').hide(); 
       $('div.nosuccess').fadeIn(); 
       } 

       } 
       }); 

我要提交选择框的所有值到PHP MySQL中存储,最好是这种格式(1,2,4) 。

谢谢

+0

只是为了扮演魔鬼的拥护者,请问为什么?如果选择了所有的值,那么脚本会做什么,而不是通常会提交的值? – 2009-10-09 17:14:45

回答

0

如果你真的想要所有这些,那么不要这样做。用PHP获得它们的方式与获得它们显示选择选项的方式相同。

4

我对jquery了解不多,但在我看来,您可能完全可以在HTML级别解决您的问题,假设您的jquery只是提交包含您的<select>标记的表单。 <select>的行为方式是浏览器只会提交所选帖子中的数据。如果选项未突出显示,则不会将其发送到您的POST中的服务器。

您可以按照以下方式解决问题;首先,您的<select>需要multiple="multiple"属性,以便可以选择多个元素。其次,将selected="selected"属性添加到<option>标记中的每个标记。最后,如果您不希望用户在提交表单前取消选择任何选项,请将disabled="disabled"属性添加到<select>标记。

更新:您可能还想要将name="sub_selected"更改为name="sub_selected[]",以便您可以在PHP端以数组形式接收该值。您需要将您的jQuery参考sub_selected调整为sub_selected[]

+2

+1:我记得,选择元素以数组形式进入PHP。 – Powerlord 2009-10-09 17:30:21

+0

@R。 Bemrose:实际上,如果select标签的name属性以[]结尾,select元素将仅以数组的形式进入PHP。 – Asaph 2009-10-09 18:02:40

0

如果你真的想用jQuery做到这一点,这里是做简单的/正确的方法:

// I'm not sure what the '#prop_tile' element is so I didn't 
// include it for this example 
var all_vals = new Array; 
$('#sub_selected option').each(function() { 
    all_vals.push($(this).val()); 
}); 
$.post('add_process.php', { stages:all_vals }, function(html) { 
    $('div.saving').hide(); 
    $('div.success').fadeIn(); 
},'html'); 

在接收端,你可以这样做:

<?php 
if(isset($_POST['all_vals'])) { 
    $all_vals = $_POST['all_vals']; 
    // $all_vals is now an array = [1,2,4] 
} 
?> 

注意:如果你透露更多关于你为什么想要这样做的更多细节会很好,因为皮肤很深,这似乎是一件愚蠢的事情。