PHP代码和HTML分离

PHP代码和HTML分离

表单编辑一些数据时,读取后台数据并填充到表单是一件繁琐的事情,尤其是表单域很多而且包含radio,checkbox,select等的时候。你一定见过下面的代码:
<select name="area">
	<option value="nankai" <?php if($area=='nankai') echo 'selected="selected"';?>>南开区</option>
	<option value="hexi" <?php if($area=='hexi') echo 'selected="selected"';?>>河西区</option>
	<option value="xiqing" <?php if($area=='xiqing') echo 'selected="selected"';?>>西青区</option>
</select>

PHP和HTML混在一起非常乱,于是我想到用jQuery来优化这一过程,将PHP代码和HTML分离。
请看下面的HTML:

<table>
	<tr>
		<td>姓名</td>
		<td>
			<input type="hidden" name="id" />
			<input type="text" name="name" /> 
		</td>
	</tr>
	
	<tr>
		<td>地区</td>
		<td>
			<select name="area">
				<option value="nankai">南开区</option>
				<option value="hexi">河西区</option>
				<option value="xiqing">西青区</option>
			</select>
		</td>
	</tr>
	
	<tr>
		<td>性别</td>
		<td>
			<input type="radio" name="sex" value="male" />男
			<input type="radio" name="sex" value="female" />女
		</td>
	</tr>
	
	<tr>
		<td>爱好</td>
		<td>
			<input type="checkbox" name="hobby[]" value="movie" />电影
			<input type="checkbox" name="hobby[]" value="music" />音乐
			<input type="checkbox" name="hobby[]" value="basketball" />篮球
		</td>
	</tr>
	
	<tr>
		<td>简介</td>
		<td>
			<textarea name="intro"></textarea>
		</td>
	</tr>
	
</table>

这里面包含了常用的表单域,下面我们从服务端读取数据:

<?php 
//从数据库读取的用户信息,需要注意的是,数组的键名应和表单域保持一致
$user = array(
	'id'=>1,
	'name'=>'张三',
	'area'=>'hexi',
	'sex'=>'male',
	'hobby'=>'music,movie',
	'intro'=>'你好,世界'
);
 
//将数组序列化为json字符串
$json = json_encode($user);
 
?>

如下调用数据填充到表单:

//将PHP生成的json字符串赋值给js变量
var user = '<?php echo $json;?>';
 
$(function(){
 
	//将数据加载到表单中
	loadData(user);
 
});

loadData的实现很简单,封装成函数后可以在任何地方使用,请看js代码:

<code class="hljs typescript"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span class="hljs-function"> </span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">loadData</span></span></span><span class="hljs-function">(</span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">jsonStr</span></span></span><span class="hljs-function">)</span></span>{  
    <span class="hljs-keyword">var</span> obj = <span class="hljs-built_in">eval</span>(<span class="hljs-string">"("</span>+jsonStr+<span class="hljs-string">")"</span>);  
    <span class="hljs-keyword">var</span> key,value,tagName,<span class="hljs-keyword">type</span>,arr;  
    <span class="hljs-keyword">for</span>(x <span class="hljs-keyword">in</span> obj){  
        key = x;  
        value = obj[x];  
          
        $(<span class="hljs-string">"[name='"</span>+key+<span class="hljs-string">"'],[name='"</span>+key+<span class="hljs-string">"[]']"</span>).each(<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span class="hljs-function">(</span><span class="hljs-params"></span><span class="hljs-function"><span class="hljs-params"></span>)</span></span>{  
            tagName = $(<span class="hljs-keyword">this</span>)[<span class="hljs-number">0</span>].tagName;  
            <span class="hljs-keyword">type</span> = $(<span class="hljs-keyword">this</span>).attr(<span class="hljs-string">'type'</span>);  
            <span class="hljs-keyword">if</span>(tagName==<span class="hljs-string">'INPUT'</span>){  
                <span class="hljs-keyword">if</span>(<span class="hljs-keyword">type</span>==<span class="hljs-string">'radio'</span>){  
                    $(<span class="hljs-keyword">this</span>).attr(<span class="hljs-string">'checked'</span>,$(<span class="hljs-keyword">this</span>).val()==value);  
                }<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(<span class="hljs-keyword">type</span>==<span class="hljs-string">'checkbox'</span>){  
                    arr = value.split(<span class="hljs-string">','</span>);  
                    <span class="hljs-keyword">for</span>(<span class="hljs-keyword">var</span> i =<span class="hljs-number">0</span>;i<arr.length;i++){  
                        <span class="hljs-keyword">if</span>($(<span class="hljs-keyword">this</span>).val()==arr[i]){  
                            $(<span class="hljs-keyword">this</span>).attr(<span class="hljs-string">'checked'</span>,<span class="hljs-literal">true</span>);  
                            <span class="hljs-keyword">break</span>;  
                        }  
                    }  
                }<span class="hljs-keyword">else</span>{  
                    $(<span class="hljs-keyword">this</span>).val(value);  
                }  
            }<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(tagName==<span class="hljs-string">'SELECT'</span> || tagName==<span class="hljs-string">'TEXTAREA'</span>){  
                $(<span class="hljs-keyword">this</span>).val(value);  
            }  
              
        });  
    }  
}</code>  
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值