如何在无提交按钮时通过OnChange获取并传递表单选中项数据
解决方案
直接修改下拉框的onChange事件代码,把传递的索引换成选中项的value即可,同时可以加个判断避免默认选项触发无效跳转:
<form action="testcodepage.asp" method="post"> <select class="rounded " name="cboSearchCategories" onChange='if(this.value !== "Select One") { window.location="<%=sRootDomain%>/testcode/template/testcodepage.asp?TestCategory=" + encodeURIComponent(this.value); }' > <option value="Select One">Select One</option> <option value="SearchEquipmentDB()">SearchEquipmentDB()-Case #1</option> <option value="DisplaySingleItem()">DisplaySingleItem()-Case #2</option> <option value="CreateJSONSchema()">CreateJSONSchema()-Case #3</option> <option value="UnlockChilkatAPI()">UnlockChilkatAPI()-Case #4</option> </select> </form>
关键修改说明:
- 把
this.selectedIndex替换成this.value,直接获取选中选项的value属性值(也就是你需要的函数名)。 - 用
encodeURIComponent()对函数名编码,避免括号这类特殊字符导致URL解析错误。 - 增加
if(this.value !== "Select One")判断,防止用户选默认选项时触发跳转。
ASP Classic 后端接收处理
在testcodepage.asp里通过Request.QueryString("TestCategory")拿到传递的函数名,再用Select Case触发对应函数:
<% Dim testFunc testFunc = Request.QueryString("TestCategory") Select Case testFunc Case "SearchEquipmentDB()" Call SearchEquipmentDB() Case "DisplaySingleItem()" Call DisplaySingleItem() ' 补充其他函数的Case分支 Case Else ' 默认处理逻辑 End Select %>
关于selectedOptions的问题
如果想用selectedOptions,正确写法是this.selectedOptions[0].value(单选下拉框的selectedOptions是数组,取第一个元素即可),但直接用this.value是更简洁的实现方式。
内容的提问来源于stack exchange,提问作者Bjorgen Eatinger
相关产品推荐
相关产品推荐

