我正在基于auto.jsp中的第一个文本框自动填充第二个文本框,类似地,我想自动填充组合框,我该怎么办?即根据第一个组合框选择自动填充第二个组合框。------ auto.jsp -------
<script language="javascript" type="text/javascript"> var xmlHttp var xmlHttp function showState(str){ if (typeof XMLHttpRequest != "undefined"){ xmlHttp= new XMLHttpRequest(); } else if (window.ActiveXObject){ xmlHttp= new ActiveXObject("Microsoft.XMLHTTP"); } if (xmlHttp==null){ alert ("Browser does not support XMLHTTP Request") return } var url="state.jsp"; url += "?count=" +document.getElementById("textbox1").value;//passing first textbox value and displaying in textbox2 ID xmlHttp.onreadystatechange = stateChange; xmlHttp.open("GET", url, true); xmlHttp.send(null); } function stateChange(){ if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ document.getElementById("textbox2").value = xmlHttp.responseText; } } </script> <body> <input id="textbox1" type="text" name="name" onkeyup="showState(this.value)"/> <input id="textbox2" type="text" name="secondVal" />// here i am displaying first textbox value </body>
-------- state.jsp -----------
<% String firsttextbox=request.getParameter("count");//Got first textbox value out.println(firsttextbox);// setting it in second text box value by document.getElementById("textbox2").value = xmlHttp.responseText; %>
当从第一个组合框中选择下拉菜单时,我也想做同样的事情,然后通过在auto.jsp中启用第二个组合框将事件触发到state.jsp,我该如何实现呢?
谢谢
您可以简化现有的代码 很多 ,我认为你从你标记你的问题的方式去做- 如果你使用jQuery。以下代码将替换您显示的所有代码,并且您将不需要onkeyuphtml中的内联代码:
onkeyup
$(document).ready(function() { $("#textbox1").keyup(function() { $.get('state.jsp', {count : this.value}, function(responseData) { $("#textbox2").val(responseData); }); }); });
$.get()jQuery的简单Ajax方法之一在哪里。它将数据从第二个参数传递到第一个参数中的url,然后返回响应时,它将在第三个参数中调用该函数(这等效于您的stateChange()函数,但jQuery为您测试状态并且仅调用准备就绪时起作用)。
$.get()
stateChange()
(顺便说一句,我不建议在每次键入键时都提出一个新的Ajax请求。也许是在模糊处理时这样做,或者至少使用超时机制仅在用户停止键入例如400ms时才执行事件。)
当您说“基于第一个组合框的选择自动填充第二个组合框”时,是指根据第一个组合框中选择的值来设置可用选项的列表吗?假设您可以使用与上述类似的技术:
$("#combo1,#combo2,#combo3").change(function() { var associatedCombo = $(this).attr('data-associated'); requestData = {}; requestData[this.id] = $(this).val(); $.get('combo.jsp', requestData, function(responseData) { $("#" + associatedCombo).replaceWith(responseData); }); }); <select id="combo1" data-associated="combo4">
在哪里'combo.jsp'处理“ combo1Val”请求参数并返回适当的数据。如果使用此.replaceWith()方法,则需要返回填充组合的HTML,如下所示:
'combo.jsp'
.replaceWith()
<select id="combo2" name="combo2"> <option value="1">One</option> ... </select>
因为整个现有组合将被新组合替换。当然,还有许多其他方法,例如,仅返回选项,或者返回JSON并使用它来逐个创建选项。