我有一个带有以下代码的选择输入:
<select name="color" id="color" multiple class="form-control chzn-select" tabindex="8" onchange="autosave(this.id,this.value)">
它成功地发送了函数ID和选择值,但由于可以选择多个项目,因此出现了问题。我最多可以选择3个项目,但尝试选择第4个项目会导致它超过第一个选择项目的值。不是最近选择的项目。这是一个功能,它发送其他信息,如标题和日期(都是文本输入):
function autosave(inputid,values) {
var dataObj = {};
dataObj[inputid] = values;
$.ajax({
type: "POST",
url: "save.php",
data: dataObj,
success: function(msg) {
$('#autosavenotify').text(msg);
console.log('success');
}
})
}
在HTML方面,如果有区别的话,我会使用Bootstrap3,下面是我如何填充选择选项:
<?php
$colors = array('Red','Blue','Yellow','Purple','Green','Orange');
foreach($colors as $c) {
$selected = '';
if(in_array($c, $_SESSION['array']['colors'])) {
$selected = 'selected';
}
echo '<option value="'.$c.'" '.$selected.'>'.$c.'</option>';
}
?>
你知道为什么会发生这种事吗?我的save.php页面成功地将所有项目放置在数组中,ajax只是出于某种原因发送了不正确的值。
因为您已经在使用jQuery,所以最好只使用$(this).val( )
从您的选择中获取所选选项。这是我用你提供的代码想出的一把小提琴:http://jsfiddle.net/y7NfF/1/
您可能考虑采用的另一种方法是使用jQuery的.serialize()
或.serializeArray()
函数,在通过ajax提交数据时获取表单的所有值。但是,如果您想一次处理一个元素,那么您的方法就可以正常工作。
以下是这些功能的几个链接:
http://api.jquery.com/serialize/
http://api.jquery.com/serializeArray/