关于ASP表单联动的辣手问题,请高手指教!

yg28com 2008-01-01 06:34:43
asp网站中我想实现这样一个效果:
在一个表单框内输入一个值 ,如:电脑;然后表单的另一个框内就自动显示各个品牌供选择:

联想
戴尔
华硕
……

不知如果解决,请高手赐教,问题解决立即给大分。
...全文
213 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
yg28com 2008-01-04
  • 打赏
  • 举报
回复
感谢韩波洋帮助,问题已经解决,120分全部给你,谢谢了
vus520 2008-01-03
  • 打赏
  • 举报
回复
用果数据太多,类目也多,怎么办,将所有类目隐藏在页面中?
什么都不能 2008-01-02
  • 打赏
  • 举报
回复
asp访问数据库方面自己搞定。
其他只要保证getCategory.asp文件编码是utf-8 就可以了,因为xmlhttprequest返回内容是utf-8编码方式,其他编码的话用escape编码也可以,输出汉字是乱码说明数据库中的信息编码和页面不一致,
解决办法:
文件编码还是ANSI,<%@ pagecode=936 %>
str=escape(str)
response.write escape

----------
test.html
function handle(rv){
rv=unescape(rv)
....
}
yg28com 2008-01-02
  • 打赏
  • 举报
回复
ShiName和ShiNo如果都是数字类型的就能正常输出,可能是编码问题
yg28com 2008-01-02
  • 打赏
  • 举报
回复
getCategory.asp输出中文显示乱码
yg28com 2008-01-02
  • 打赏
  • 举报
回复
而且getCategory.asp文件必须改成如下才能显示:

<%@language="vbscript"%>
<!--#include file="mConn.asp"-->
var cate=[
<%
dim str
str=""
'connect 去掉
set rs=conn.execute("select ShiNo,ShiName from city where shengid="&request("keyword")&"")
while not rs.eof
str=str&"{ShiNo:"""&rs("ShiNo")&""",ShiName:"""&rs("ShiName")&"""},"
rs.moveNext
wend
' disconnect 去掉
str=left(str,len(str)-1)
response.write str
%>
];
yg28com 2008-01-02
  • 打赏
  • 举报
回复
我用的是accsse的数据库,getCategory.asp文件经测试,如果数据表里只有一条符合条件的数据就能输出,如果有多条却输出不了,什么原因?
yg28com 2008-01-02
  • 打赏
  • 举报
回复
好的,我再看看
什么都不能 2008-01-02
  • 打赏
  • 举报
回复

按test.html中的url打開getCategory.asp看一下页面输出的内容是什么
var obj={id:"001",text:"abc"}这是个对象id和text是对象的所属域,相当于
function obj()
{
this.id="001";
this.text="abc";
}
使用的时候
id=obj.id
text=obj.text
所以上面你的代码的引用不对,应该和你定义的一致,即:
document.DemoForm.Category.add(new Option(cate[key].shiNo,cate[key].shiName));

其他问题要你自己调试,比如调是
function handle(rv){
alert("1:"+rv); //这里是服务器返回的内容
eval(rv);
alert("2:"+cate.length);
for(var key in cate){
alert("3:"+cate[key]);
document.DemoForm.Category.add(new Option(cate[key].shiNo,cate[key].shiName));
}
}
yg28com 2008-01-02
  • 打赏
  • 举报
回复
你好,hanpoyangtitan,你的方法我用一个省市的数据库测试了,在关键字里面数入省的ID:1,怎么没有任何反应呢?
test.html

<html>
<head>
<script language="javascript" type="text/javascript" src="ajax.js"></script>
<script language="javascript" type="text/javascript">
//<![CDATA[

function getCategory(keyword){
new Ajax("get","http://localhost/gouwuwang/getCategory.asp","keyword="+keyword,"text","handle");
}

function handle(rv){
eval(rv);
document.DemoForm.Category.options.length=0;
for(var key in cate){
document.DemoForm.Category.add(new Option(cate[key].text,cate[key].id));
}
}
//]]>
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<form name="DemoForm" id="DemoForm">
<ul>
<li>关键字:<input type="text" name="keyword" id="keyword" onBlur="getCategory(this.value)" /> 
<select id="Category" name="Category">
<option value="">类别</option>
</select>
</li>
</ul>
</form>
</body>
</html>

getCategory.asp

<%@language="vbscript" pagecode="65001" %>
<!--#include file="mConn.asp"-->
var cate=[
<%
dim str
str=""
connect
set rs=conn.execute("select ShiNo,ShiName from city where shengid='"&request("keyword")&"'")
while not rs.eof
str=str&"{ShiNo:"""&rs("ShiNo")&""",ShiName:"""&rs("ShiName")&"""},"
rs.moveNext
wend
disconnect
str=left(str,len(str)-1)
response.write str
%>
];

mconn.asp


<%
db="data/#lixin%^guo&ji#.asp"
dim ConnStr
dim conn
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "数据库连接出错,请检查mConn.asp文件中的数据库参数设置。"
Response.End
End If

%>

ajax.js
function Ajax(method,url,param,ft,fun)
{
this.xhr=this.getxhr();
this.docType=ft;
switch(method.toLowerCase())
{
case "post":this.post(url,param);break;
case "get":this.get(url,param);break;
}
this._readystate=null;
this.fun=fun;

}

Ajax.prototype.getxhr=function()
{
var ms=['Microsoft.XMLHttp','MSXML.XMLHttp','MSXML2.XMLHttp','MSXML3.XMLHttp'];
if(window.ActiveXObject)
{
try{
for(var i=0;i<ms.length;i++)
{
return new ActiveXObject(ms[i]);
}
}
catch(e){}
}
else if(window.XMLHttpRequest)
{
var req=new XMLHttpRequest();

if(req.overrideMimeType)
{
req.overrideMimeType("text/xml");
}

}
return req;
}

Ajax.prototype.post=function(url,param)
{
var rc=Math.round(Math.random()*999);
if(url.indexOf("?")>=0)
{
url+="&arnd="+rc;
}
else
{
url+="?arnd="+rc;
}
this.xhr.open("post",url,true);
var obj=this;
this.xhr.onreadystatechange=function(){obj.call_(obj)}
this.xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
this.xhr.send(param);
}

Ajax.prototype.get=function(url,param)
{
var rc=Math.round((Math.random()*999));
if(url.indexOf("?")>=0)
{
url+="&"+param+"&arnd="+rc;
}
else
{
url+="?"+param+"&arnd="+rc;
}
this.xhr.open("get",url,true);
var obj=this;
this.xhr.onreadystatechange=function(){obj.call_(obj)}
this.xhr.send(null);
}

Ajax.prototype.call_=function(req)
{
if(req.xhr.readystate==4)
{
if(req.xhr.status==200)
{
if(req.docType.toLowerCase()=="xml")
{
eval(req.fun+"(req.xhr.responseText)");
}
else
{
eval(req.fun+"(req.xhr.responseText)");
}
}
}
}
//prototype 方法
function $() {
var elements = new Array();

for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);

if (arguments.length == 1)
return element;

elements.push(element);
}

return elements;
}

以上四个文件的编码都是utf-8,不知什么原因,请指教,不盛感激!
yangtzeu 2008-01-02
  • 打赏
  • 举报
回复
还是用下拉表单方便些吧
yousite1 2008-01-02
  • 打赏
  • 举报
回复
select.js內容:


function getRoute(dic,value,mode){
var strRoute,intDepth=-1;
for(var i=dic.length-1;i>-1;i--){
if(intDepth>-1){
if(intDepth==0) return(strRoute);
if(dic[i][0]<intDepth){
strRoute=i+","+strRoute;
intDepth--;
}
}else{
if(dic[i][mode]==value){
strRoute=i.toString();
intDepth=dic[i][0];
}
}
}
return(strRoute);
}
function getRoutes(dic,route,mode){
var strRoute="",depth=0;
var arrRoute=route.split(",");
var intDepth=arrRoute.length-1;
for(var i=0;i<dic.length;i++){
if(dic[i][mode]==arrRoute[depth]){
if(strRoute)strRoute+=","+i;
else strRoute=i.toString();
if(depth==intDepth)return(strRoute);
else depth++;
}
}
return(strRoute);
}
function drawSelect(obj,dicName){
var argv=drawSelect.arguments;
var argc=drawSelect.arguments.length;
var mode=(argc>2)?argv[2]:0;
var name=(argc>3)?argv[3]:"";
var value=(argc>4)?argv[4]:"";
var tips=(argc>5)?argv[5]:"";
var prop=(argc>6)?argv[6]:"";

var dic=eval(dicName),objValue="";
switch(mode){
case 0:value=getRoute(dic,value,2);mode=5;break;
case 1:value=getRoutes(dic,value,1);mode=6;break;
case 2:value=getRoute(dic,value,1);mode=7;break;
case 3:value=getRoutes(dic,value,2);mode=8;break;
}
var strRoute="",arrRoute=new Array();
if(value)arrRoute=value.split(",");
var strHtml="",arrHtml=new Array();
var intDepth,strTitle,strValue,j,selDepth=0;
for(var i=0;i<dic.length;i++){
intDepth=dic[i][0];strTitle=dic[i][1];strValue=dic[i][2];
if(intDepth==selDepth){
if(arrHtml[selDepth]==null){
arrHtml[selDepth]="<select onChange={drawSelect(this.parentNode,\""+dicName+"\","+mode+",\""+name+"\",this.value,\""+tips+"\",\""+prop+"\")} "+prop+">";
if(tips){
if(selDepth)arrHtml[selDepth]+="<option value=\""+strRoute+"\">"+tips+"</option>";
else arrHtml[selDepth]+="<option value=\"\">"+tips+"</option>";
if(arrRoute[selDepth]==null)arrRoute[selDepth]=-1;
}else if(arrRoute[selDepth]==null)arrRoute[selDepth]=i;
}
if(i==arrRoute[selDepth]){
arrHtml[selDepth]+="<option value=\""+strRoute+i.toString()+"\" selected>"+strTitle+"</option>";
selDepth++;
strRoute+=i.toString()+",";
switch(mode){
case 5:objValue=strValue;break;
case 6:if(objValue)objValue+=","+strTitle;else objValue=strTitle;break;
case 7:objValue=strTitle;break;
case 8:if(objValue)objValue+=","+strValue;else objValue=strValue;break;
}
}else{
arrHtml[selDepth]+="<option value=\""+strRoute+i.toString()+"\">"+strTitle+"</option>";
}
}else if(intDepth<selDepth){
selDepth=intDepth;
strRoute="";
for(j=0;j<selDepth;j++)strRoute+=arrRoute[j]+",";
arrHtml[selDepth]+="<option value=\""+strRoute+i.toString()+"\">"+strTitle+"</option>";
}
}
for(i=0;i<arrHtml.length;i++){
strHtml+=arrHtml[i]+"</select>";
}
strHtml+="<input type=\"hidden\" value=\""+objValue+"\" name=\""+name+"\" id=\""+name+"\">";
if(obj==null)document.write("<span>"+strHtml+"</span>");
else obj.innerHTML=strHtml;
}
yousite1 2008-01-02
  • 打赏
  • 举报
回复
<script language="javascript" src="javascript/select.js"></script>
<script>

var arrArea=new Array(
<%
Areacbo = ListAreaDeep(1, 0)
Areacbo = Left(Areacbo, Len(Areacbo) - 1)
Response.write Areacbo
%>

);
</script>

<script language="javascript">
drawSelect(null,"arrArea",1,"strArea", "<% = typeAreaName(GetAreaID())%>,");
</script>


<%
'列举列限级联动地区列表
Function ListAreaDeep(Byval Pid, Byval DeepCount)
Dim Rs
Set Rs = Server.CreateObject("Adodb.recordset")
Rs.Open "Select * from CantonList Where ParentNID = " & Pid, Conn, 1, 1
If Rs.Eof Then
Rs.Close
Set Rs = Nothing
Exit Function
End If

Do While Not Rs.Eof
If IsNull(Rs("ParentNID")) Then Exit Function
ListAreaDeep = ListAreaDeep & "[" & DeepCount & ",'" & Rs("ItemNameTW") & "'," & ItemC & "]," & ListAreaDeep(Rs("NID"), DeepCount + 1)
ItemC = ItemC + 1
Rs.MoveNext
Loop
Rs.Close
Set Rs = Nothing
End Function
%>
toury 2008-01-02
  • 打赏
  • 举报
回复
"要是输入一个值"电脑"后,后面的下拉菜单就能自动从数据库里找出它下面的小类:("联想","方正","华硕","戴尔"……)并显示就达到我要的效果了;"-------------->这个要结合你数据库表的结构写;你把相关的表结构和简单数据贴出来
什么都不能 2008-01-02
  • 打赏
  • 举报
回复
将test.html中的onclick改为onblur
将test.html中的 new Ajax()的第二个参数改为getcategory.asp
将getCategory.asp中的'"&&"'"改为'"&request("keyword")
暂时就这样了,有问题再说
什么都不能 2008-01-02
  • 打赏
  • 举报
回复
<html>
<head>
<script language="javascript" type="text/javascript" src="ajax.js"></script>
<script language="javascript" type="text/javascript">
//<![CDATA[

function getCategory(keyword){
new Ajax("get","http://localhost:81/getCategory.html","keyword="+keyword,"text","handle");
}

function handle(rv){
eval(rv);
document.DemoForm.Category.options.length=0;
for(var key in cate){
document.DemoForm.Category.add(new Option(cate[key].text,cate[key].id));
}
}
//]]>
</script>
</head>
<body>
<form name="DemoForm" id="DemoForm">
<ul>
<li>关键字:<input type="text" name="keyword" id="keyword" onclick="getCategory(this.value)" /> 
<select id="Category" name="Category">
<option value="">类别</option>
</select>
</li>
</ul>
</form>
</body>
</html>

ajax.js
function Ajax(method,url,param,ft,fun)
{
this.xhr=this.getxhr();
this.docType=ft;
switch(method.toLowerCase())
{
case "post":this.post(url,param);break;
case "get":this.get(url,param);break;
}
this._readystate=null;
this.fun=fun;

}

Ajax.prototype.getxhr=function()
{
var ms=['Microsoft.XMLHttp','MSXML.XMLHttp','MSXML2.XMLHttp','MSXML3.XMLHttp'];
if(window.ActiveXObject)
{
try{
for(var i=0;i<ms.length;i++)
{
return new ActiveXObject(ms[i]);
}
}
catch(e){}
}
else if(window.XMLHttpRequest)
{
var req=new XMLHttpRequest();

if(req.overrideMimeType)
{
req.overrideMimeType("text/xml");
}

}
return req;
}

Ajax.prototype.post=function(url,param)
{
var rc=Math.round(Math.random()*999);
if(url.indexOf("?")>=0)
{
url+="&arnd="+rc;
}
else
{
url+="?arnd="+rc;
}
this.xhr.open("post",url,true);
var obj=this;
this.xhr.onreadystatechange=function(){obj.call_(obj)}
this.xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
this.xhr.send(param);
}

Ajax.prototype.get=function(url,param)
{
var rc=Math.round((Math.random()*999));
if(url.indexOf("?")>=0)
{
url+="&"+param+"&arnd="+rc;
}
else
{
url+="?"+param+"&arnd="+rc;
}
this.xhr.open("get",url,true);
var obj=this;
this.xhr.onreadystatechange=function(){obj.call_(obj)}
this.xhr.send(null);
}

Ajax.prototype.call_=function(req)
{
if(req.xhr.readystate==4)
{
if(req.xhr.status==200)
{
if(req.docType.toLowerCase()=="xml")
{
eval(req.fun+"(req.xhr.responseText)");
}
else
{
eval(req.fun+"(req.xhr.responseText)");
}
}
}
}
//prototype 方法
function $() {
var elements = new Array();

for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);

if (arguments.length == 1)
return element;

elements.push(element);
}

return elements;
}

getCategory.html //测试数据 需要保存为utf-8文件
var cate=[{id:'001',text:'ASUS'},{id:'002',text:'Beniq'},{id:'003',text:'IBM'},{id:'004',text:'联想'}];

getCategory.asp
<%@language="vbscript" pagecode="65001" %>
<!--#include file="DBConn.asp"-->
var cate=[
<%
dim str
str=""
connect
set rs=conn.execute("select id,text from category where parentId='"&&"'")
while not rs.eof
str=str&"{id:"""&rs("id")&""",text:"""&rs("text")&"""},"
rs.moveNext
wend
disconnect
str=left(str,len(str)-1)
response.write str
%>
];

需要保存成utf-8文件

非凡笨笨 2008-01-02
  • 打赏
  • 举报
回复
下拉框不可以?
yg28com 2008-01-02
  • 打赏
  • 举报
回复
有人能解决吗?在线等……
yg28com 2008-01-02
  • 打赏
  • 举报
回复
我现在需要这种效果,希望能得到高手指点,在线等待,解决问题立即结帖,谢谢各位。
yanniu008 2008-01-02
  • 打赏
  • 举报
回复
呵呵是的 所以还是用下拉选择比较的好
加载更多回复(6)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧