> 백엔드 개발 > PHP 튜토리얼 > 下拉联动问题

下拉联动问题

WBOY
풀어 주다: 2016-06-23 13:55:06
원래의
901명이 탐색했습니다.

省和市的联动,省市的内容都是从数据库里取出来的,
现在是选择了省,对应的市出来之后,省又回到最初的值,选择的值保存不住,因为画面又刷新了。
有什么办法能保存住省,或者不用画面刷新?

下面是部分代码

<p class="Fld"><label class="label" for="state">省</label><span class="control"><select id="state" class="req1" name="Prefecture"  onchange="getCitySubmit();"> 		<!--{html_options options=$provinceList}-->        </select></span></p><p class="Fld"><label class="label" for="city">市</label><span class="control"><select id="city" class="req1" name="City" >            <!--{html_options options=$cityList}-->        </select></span></p>
로그인 후 복사

//初期,绑定省 public function action()    {    	$retArr=array();    	//省取得    	$retArr=$this->qaModel->getProvince();    	if(count($retArr)>0)    	{    		foreach ($retArr as $key => $i)    		{    		   $provinceList[$i["PROVINCE_KEY"]] = $i["PROVINCE_NAME"];    		}    	}    	//取得したデ?タを?定      	$this->_smarty->assign("provinceList", $provinceList);    	// お?い合わせ画面を表示する 这步显示画面submit.html    	$this->_smarty->render($this->_language."/submit");    }//联动,绑定市 public function cityAction()    {    	$province_key=$this->_context->query("province_key", "");    	$this->log->info($province_key);    	$retArr=array();    	//省取得    	$retArr=$this->qaModel->getCity($province_key);    	if(count($retArr)>0)    	{    		foreach ($retArr as $key => $i)    		{    			$cityLis[$i["CITY_KEY"]] = $i["CITY_NAME"];    		}    	}    	//取得したデ?タを?定    	$this->_smarty->assign("cityList", $cityLis);    	// お?い合わせ画面を表示する  这步再回到初期,这样的话省就重新绑定了    	$this->action();    }
로그인 후 복사


回复讨论(解决方案)

日文? 不刷新很定要ajax传值呀

参考Ajax:

<?php#action.phpif(isset($_GET['id'])){	$sql="select * from table where id=".$_GET['id'];	$res=mysql_query($sql);	if(!$res) die("SQL: {$sql} <br>Error:".mysql_error());	if(mysql_affected_rows() > 0){		$arrMenu=array();		while($rows = mysql_fetch_array(MYSQL_ASSOC)){			array_push($arrMenu,$rows);		}	}	mysql_close();	if(!empty($arrMenu)){		echo "<select name='menu2'>";		foreach($arrMenu as $item2){			echo "<option value='{$item2['id']}'>{$item2['name']}</option>";		}		echo "</select>";	}}?>
로그인 후 복사

<form name="frm"><select name="s1" onChange="redirec(this.value)"> <option selected>请选择</option> <option value="1">天文</option> <option value="2">地理</option> <option value="3">算术</option></select><div id="s2"></div></form><script>$("select").live("change",function(){			$.ajax({				  type: "GET",				  url: "action.php",				  data: "id="+$(this).val(),				  cache: false,				  success: function(text){				    $("#show").append(text);				  }			});		});
로그인 후 복사

这是ajax的事。

こんにちは。


你要把选中的省市id传一下。

こんにちは。


你要把选中的省市id传一下。



弄是弄好了,还是刷新的。

你这乱七八糟的日文是什么网站?日本的? 日本用都道府县 市区町村。
建议用ajax做。这样速度快点 不用每次刷新。




function Linkage(obj,id) {
var param = {};
param.mst_state_id = obj;
$.ajax({
type : "POST"
, url : " php"
, data : $.param(param)
, dateType : "xml"
, success : function(xml) {
var selects = $("select[id="+id+"]");
$(selects)[0].length=0;
$(selects)[0].options[0]=new Option("市区町村","0");
$("category", xml).each(function(){
var id = $("id", this).text();
var name = $("name", this).text();
$(selects)[0].options.add(new Option(name, id));
});
}
});
}

url : "php" 这里是接受都道府县的id的php 注意路径
这个php 最后输出

$str = "";
foreach ($m_state2 as $key => $val) {
$str .= "" . $key . "" . $val . "";
}
header("Content-Type:text/xml; charset=utf-8");
echo ''.mb_convert_encoding($str, "utf-8").'';
exit;

你这乱七八糟的日文是什么网站?日本的? 日本用都道府县 市区町村。
建议用ajax做。这样速度快点 不用每次刷新。



{html……



是中国的网站,有三种语言版本

你这乱七八糟的日文是什么网站?日本的? 日本用都道府县 市区町村。
建议用ajax做。这样速度快点 不用每次刷新。


mst_state_id 是你的select的属性。这个随便起名字,只要能统一就行。改成你的state也可以。

引用 2 楼 的回复:

参考Ajax:
PHP code
#action.php
if(isset($_GET['id'])){
$sql="select * from table where id=".$_GET['id'];
$res=mysql_query($sql);
if(!$res) die("SQL: {$sql}
Error:".mysq……



<form name="frm"><select name="s1" onChange="record(this.value)"> <option selected>请选择</option> <option value="1">天文</option> <option value="2">地理</option> <option value="3">算术</option></select><div id="show"></div></form><!--Ajax属于js应用,当然要放在script标签中,两种写法jQuery和JavaScript--><script>//Ajax-jquery,必须加载jQuery库:jquery_1.4.2.jsdocument.write("<script src='jquery_1.4.2.js'></script>");$("select").live("change",function(){			$.ajax({				  type: "GET",				  url: "action.php",				  data: "id="+$(this).val(), //这里的id获取的是select选中的value值				  cache: false,				  success: function(text){				    $("#show").append(text);				  }			});		});//Ajax-javascriptvar xmlHttp;	function createXMLHttpRequest() {		if(window.XMLHttpRequest) {			xmlHttp = new XMLHttpRequest();		} else if (window.ActiveXObject) {			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");		}	}	function record(id){  //这里的id获取的是select选中的value值		createXMLHttpRequest();		url = "action.php?id="+id+"&ran="+Math.random();		method = "GET";		xmlHttp.open(method,url,true);		xmlHttp.onreadystatechange = show;  //利用回调函数返回php处理后的数据		xmlHttp.send(null);	}	function show(){		if (xmlHttp.readyState == 4){			if (xmlHttp.status == 200){				var text = xmlHttp.responseText;				document.getElementById("show").innerHTML = text;  //这里将php返回的数据写入html中id=show的标签中			}else {				alert("response error code:"+xmlHttp.status);			}		}	}</script>
로그인 후 복사

引用 8 楼 的回复:

引用 2 楼 的回复:

参考Ajax:
PHP code
#action.php
if(isset($_GET['id'])){
$sql="select * from table where id=".$_GET['id'];
$res=mysql_query($sql);
if(!$res) die("SQL: {$sql} ……




我只是想联动一下,怎么会这么麻烦呢,我都看不懂啊,拷进去也改不对。。。

“jquery_1.4.2.js”是不是还需要这个文件,还是只要有这句话就可以了?

好痛苦啊

你想用ajax就要加载jquery文件的。
需要那个文件 要把它加载到你的html文件里面 写对路径。


写在head头里就行。

这个能测试,至于能懂多少就看你的了,先会用,再慢慢琢磨

<?php/* Created on [2012-7-4] Author[Newton] */#Ajax_select.php 此php和html要分为两个页面if(isset($_GET['id'])){	#$arrMenu数组可以是数据库查询的结果数组等任意二维数组	$arrMenu=array(		array('id'=>3,'name'=>'Tom'),		array('id'=>2,'name'=>'Lily'),		array('id'=>1,'name'=>'Smith'),	);	echo "<select name='menu2'>";	foreach($arrMenu as $item2){		echo "<option value='{$item2['id']}'";		if($item2['id']==$_GET['id'])			echo "selected";		echo " >{$item2['name']}</option>";	}	echo "</select>";}?>
로그인 후 복사

<html> <head>  <title>测试Variable Modifiers</title> </head> <body><form name="frm"><select name="s1" onChange="record(this.value)"> <option selected>请选择</option> <option value="1">天文</option> <option value="2">地理</option> <option value="3">算术</option></select><div id="show"></div></form><script language='javascript'>//Ajaxvar xmlHttp;	function createXMLHttpRequest() {		if(window.XMLHttpRequest) {			xmlHttp = new XMLHttpRequest();		} else if (window.ActiveXObject) {			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");		}	}	function record(id){		createXMLHttpRequest();		url = "Ajax_select.php?id="+id+"&ran="+Math.random();		method = "GET";		xmlHttp.open(method,url,true);		xmlHttp.onreadystatechange = show;		xmlHttp.send(null);	}	function show(){		if (xmlHttp.readyState == 4){			if (xmlHttp.status == 200){				var text = xmlHttp.responseText;				document.getElementById("show").innerHTML = text;			}else {				alert("response error code:"+xmlHttp.status);			}		}	}</script> </body></html>
로그인 후 복사

你可以使用$_GET,或者$_getJson来处理,方便

这个能测试,至于能懂多少就看你的了,先会用,再慢慢琢磨
PHP code

/* Created on [2012-7-4] Author[Newton] */
#Ajax_select.php 此php和html要分为两个页面
if(isset($_GET['id'])){
    #$arrMenu数组可以是数据库查询的结果数组等任意二维数组
    $arrMenu=arr……


onChange="record(this.value)" 取不到value值。。

会报一个警告,オブジェクトを指定してください。
我以为是参数传错了,后来发现把参数去掉也报这个错

谢谢各位,搞定了

会报一个警告,オブジェクトを指定してください。
我以为是参数传错了,后来发现把参数去掉也报这个错


出这个问题是什么情况?怎么解决啊,楼主
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿