如何使用ajax / js在列表表单字段中选择选项?

时间:2015-05-09 17:45:12

标签: jquery ajax

我在事件注册页面上有列表字段,其中一些有多个选择。例如,这里有一个:

<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,我不知道如何循环遍历所有选项,我认为这需要某种递归。

提前致谢!

1 个答案:

答案 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);