我在事件注册页面上有列表字段,其中一些有多个选择。例如,这里有一个:
<script type="text/javascript">
function inputFocus(i){
if(i.value==i.defaultValue){ i.value=""; i.style.color="#000"; }
}
function inputBlur(i){
if(i.value==""){ i.value=i.defaultValue; i.style.color="#888"; }
}
jQuery(document).ready(function($) {
$(".previousreg-link").on("click", function( event ){
event.preventDefault(); // Prevents browser following #hash
$(this).hide(); // hide the button
$(".previousreg-form-container").show(); // Show the form parent
});
$('#previousregbox').click(function(){
this.checked?$('.previousreg-form-container').show(100):$('.previousreg-form-container').hide(100);
});
$(".previousreg-form-container form").on("submit", function( event ){
event.preventDefault(); // Don't send headers
/* Clear result div*/
$("#result").html('');
//alert( $(this).serialize() +"\nWILL BE SENT TO PHP" );
$.ajax({
type : "POST",
url : "/components/com_icagenda/previousreg.php",
data : $(this).serialize(), // `this` is our form
success: function(xml){
//alert("success");
//alert($("email",xml).text());
if ($("message",xml).text() == "") {
$("#result").html('Your previous registration data has been loaded.');
//$("#email_slug").val($("email",xml).text());
//var $xml = $.parseXML(xml);
var $xml = $($.parseXML(xml));
//$("#response", xml).children().each(function(e) {
//$(xml).find('response').children().each(function() {
$xml.find('response').each(function() {
var data={}
$(this).children().each(function() {
//alert($(this).text());
//data[this.tagName]=$(this).text();
$("#"+this.tagName).val($(this).text());
})
});
} else {
$("#result").html($("message",xml).text());
}
},
error:function(xml){
//alert("failure");
$("#result").html('There was an error on the server. We apologize for the inconvenience.');
}
});
});
});
</script>
表单非常大,当有人注册时,我会向他们发送一个唯一的ID,可以用来自动加载他们以前的数据。在大多数情况下它工作正常。以下是我在注册表中的代码:
{{1}}
以上适用于文本字段,无线电控件和单选列表。老实说,我甚至不确定如何使它适用于列表,因为js调用不会将列表选项标记为已选中。但我认为设定val就足够了。问题是这不适用于多个选择列表,因为我怀疑会发生这种情况。
有人可以告诉我如何编辑我的代码以考虑多个选择列表吗?在XML响应中,多个选择列表值将是一个字符串,每个值以逗号分隔。
我只是不熟悉jquery语法来弄清楚如何进行编辑,而对于optgroups,我不知道如何循环遍历所有选项,我认为这需要某种递归。
提前致谢!
答案 0 :(得分:1)
这应该可以解决问题:
function setOptions(input)
{
var options = input.split(",");
$("#expertise option").each(function(){
var value = $(this).val();
if(options.indexOf(value) >= 0)
$(this).prop("selected", true);
else
$(this).prop("selected", false);
});
}
var data = "option1,option2,option3";
setOptions(data);