繁体   English   中英

使用上一个下拉菜单中的选项动态填充下拉菜单

[英]Dynamically populate drop down menu with selection from previous drop down menu

我有一个用Python编写的cgi脚本。 有两个下拉菜单,然后是一个提交按钮。 我希望能够从第一个菜单中进行选择,然后基于该选择,使第二个下拉菜单动态填充新选择。 无需单击任何按钮即可填充第二个菜单,而只需从第一个菜单中进行选择即可。 每次我在第一个菜单上选择一个新项目时,第二个菜单也应连续重新填充-再次,而不单击提交。

完成这项工作的总体思路是什么? 我已经实现了一些代码。 它在是否提供输入的条件下使用if / else语句。 因此,在选择了第一个下拉菜单之后,页面将提交,并且if / else语句将代码定向到显示相同形式但下拉菜单中保持选择的代码。 我使用onchange ='this.form.submit()提交表单,而无需使用提交按钮。 当前的问题是,在进行选择时,第一次会自动提交表单,但是在此表单上重新选择似乎不起作用。 因此,我不确定onchange ='this.form.submit()是否在第一次之后提交表单。

这是一个原型。 我朝着正确的方向前进吗? 还是我应该使用Ajax? (对此完全不熟悉):

firstChoicesList = firstChoices()
print(""" <form method="post" action="/cgi-bin/thisScript.py">""")

# if both choices are not selected yet
if "firstChoice" not in form and "secondChoice" not in form:
    # first choice drop down menu
    print("""<p>first choice <select name="firstChoice">""")
    for f in fristChoicesList:
        print("""<option value='""" + f + """'>""" + f + """</option>""")

    # second choice drop down menu
    print("""</select></p>""")
    print("""<p>second choice <select name="secondChoice">""")
    for f in secondChoicesList: # currently contains 1 empty string 
        print("""<option value='""" + f + """'>""" + f + """</option>""")
    print("""</select></p>""")
    print("""
                        <p><input type="submit" />
                </form>
    """)
    print("Please fill in the forms.")
    sys.exit(1) # don't proceed with rest of code below these if/else statements

# if first choice has been selected but not the second
elif "firstChoice" in form and "secondChoice" not in form: 
    # <code for first drop down menu again with choice selected>
    # this function takes the first choice as an argument and returns selections for the second menu
    secondChoicesList = secondChoices(form["firstChoice"].value) 
    # <code for second drop down menu with choices populated from secondChoicesList>
    print("""
                        <p><input type="submit" />
                </form>
    """)
    print("Please fill in the forms.")
    sys.exit(1)

# if both are selected 
else:
    # <same code as above except have both drop down menus save previous selections>
    # proceed to run rest of cgi script 

这是一个提示:您可以使用对服务器端页面的ajax调用来填充下一个菜单(这将使您返回数据):这将使您:
-避免发送表单和通过页面传递值(您只能在最后发送表单)
-让用户更改自己的选择(如果需要),而无需浏览历史记录

我认为将ajax与jquery一起使用将非常简单,即使您不知道也是如此。

请检查简短的ajax jquery小提琴示例 ,看看使用jquery有多容易(在这里,对于跨域请求,那不是您的情况,您必须禁用浏览器的网络安全,例如,对于google chorme set google chrome to使用ajax发出跨域请求

小提琴的代码:

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<body>
<select name="a" id="a" onchange="func(this.value)">
<option value="">choose</option>
<option value="https://www.google.it/search?q=ajax+and+juery&oq=ajax+and+juery&aqs=chrome.0.57j0l3.7474j0&sourceid=chrome&ie=UTF-8#sclient=psy-ab&q=ajax+jquery&oq=ajax+jquery&gs_l=serp.3..0l10.2179.3578.2.3820.7.3.1.3.3.1.206.516.0j2j1.3.0...0.0.0..1c.1.15.serp.9gdUZUmAxcI&psj=1&bav=on.2,or.r_qf.&bvm=bv.47244034,d.ZGU&fp=41333c9f97f3f20a&biw=800&bih=505">google</option>
<option value="http://it.bing.com/search?q=ajax+jquery&go=&qs=n&form=QBLH&filt=all&pq=ajax+jquery&sc=0-0&sp=-1&sk=">bing</option>
</select>
</body>
<script>
function func(ak){
$.ajax({
    url : ak,
    success : function (data,state) {
        $("body").html(data);
        alert(state);
    },
    error : function (request,state,error) {
        alert("Error. stato della chiamata: "+request+'  '+error+'   '+state);
    console.log("Error. stato della chiamata: "+request+'  '+error+'   '+state);
    }
});
}
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM