我根据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,我该如何实现呢?
谢谢
答案 0 :(得分:0)
如果您使用jQuery,您可以简化现有代码 lot - 我假设您从标记问题的方式开始。以下内容将替换您显示的所有代码,另外您不需要html中的内联onkeyup
:
$(document).ready(function() {
$("#textbox1").keyup(function() {
$.get('state.jsp', {count : this.value}, function(responseData) {
$("#textbox2").val(responseData);
});
});
});
其中$.get()
是jQuery的简单Ajax方法之一。它将第二个参数中的数据传递给第一个参数中的url,当响应返回时,它调用第三个参数中的函数(这类似于你的stateChange()
函数,除了jQuery测试状态为你准备就绪时只调用这个函数。
(顺便说一句,我不会在每个keyup上推荐一个新的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()
method,则需要返回填充组合的HTML,如下所示:
<select id="combo2" name="combo2">
<option value="1">One</option>
...
</select>
因为整个现有的组合将被替换为新的组合。当然还有很多其他的方法,例如,只返回选项,或者返回JSON并使用它来逐个创建选项。