难以序列化下拉菜单

时间:2013-07-11 14:20:41

标签: javascript jquery serialization drop-down-menu

基本上我的页面上有很多表单,我希望能够一次访问它们并将它们添加到一个大的get请求中。它在很大程度上起作用,但我在使用下拉菜单时遇到了一些麻烦,因为它们的标记与其他形式不同(至少在我看过的例子中)。因为我刚接触前端开发,所以请耐心等待,但这是我到目前为止所做的:

    <form id="sorting" class="auto-submit" action="/search" method="get">
        <select id="sorting" class="parameter" action="/search" method="get">
            % if previous.get("sorting", "false") == "relevance":
                <option selected="selected" name="sort" value="relevance">Relevance</option>
                <option name="sort" value="alphabetical">Alphabetical</option>
            % elif previous.get("sorting", "false") == "alphabetical":
                <option name="sort" value="relevance">Relevance</option>
                <option name="sort" selected="selected" value="alphabetical">Alphabetical</option>
            % else:
                <option name="sort" value="relevance">Relevance</option>
                <option name="sort" value="alphabetical">Alphabetical</option>
            % endif
        </select>
    </form>

我正在尝试访问这些值的脚本(从其他地方启动,但我不认为这是问题):

function submitForms(retain_page) {
    var get_data = [];
    var form_list = $(".auto-submit .parameter");
    for (var i in form_list){
        get_data.push.apply(get_data, form_list.eq(i).serializeArray());
    }
    var url = document.URL.split("?")[0]+"?";
    for (var o in get_data){
        if (retain_page === false){
            if (get_data[o].name == "page"){
                get_data[o].value = 1;
            }
        }
        url = url + (get_data[o].name + "=" +get_data[o].value + "&");
    }
    document.location.href = url.substring(0, url.length-1);
}

我很确定问题在于我是如何访问该元素的,并且在javascript控制台中我通过运行以下内容得到了我想要的内容:

$(".auto-submit .parameter").eq(4).val()

当我尝试序列化相同的元素时,我得到一个空的响应,这让我觉得它在某种程度上没有意识到它应该在表单中提交,但是我有点不知道我应该在哪里定义它。对不起,如果这是一个愚蠢的问题,但任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

所以,我想出了如何序列化这个,但我认为这表明我的编码风格存在更深层次的问题,因此我暂时不接受这一点,并且完全接受其他答案。

当我给select元素命名时,一切都突然起作用了。这里有参考的更新代码:

 <form id="sorting" class="auto-submit" action="/search" method="get">
        <select name="sort" id="sorting" class="parameter" action="/search" method="get">
            % if previous.get("sort", "false") == "relevance":
                <option selected="selected" value="relevance">Relevance</option>
                <option value="alphabetical">Alphabetical</option>
            % elif previous.get("sort", "false") == "alphabetical":
                <option value="relevance">Relevance</option>
                <option selected="selected" value="alphabetical">Alphabetical</option>
            % else:
                <option value="relevance">Relevance</option>
                <option value="alphabetical">Alphabetical</option>
            % endif
        </select>
    </form>