用thinkphp输出模板之后,怎么为其中的按钮添加动作呢?
<foreach name="photo" item="v">
<h1><p>{$v.id}</p><span>{$v.name}</span></h1>
<img src="__PUBLIC__/images/QQ/1.jpg" width="500" height="475" alt={$.name} />
<input class="vote" type="button" name="投票" value="投票"/>
</foreach>
在js中怎么写,ajax传数据的时候,需要把图片id(亦即$v.id)传过去,这个该怎么写?
我说一下我的思路:你给按钮添加一个自定义的属性,属性名可以是任意的,属性值为$v.id,然后在点击这个按钮时,取得该按钮的这个自定义 的属性的值,把它递给后端PHP来处理就行了,那直接上代码了,用的是JQuery来实现的:
模板文件:
<foreach name="photo" item="v"><h1><p>{$v.id}</p><span>{$v.name}</span></h1>
<img src="__PUBLIC__/images/QQ/1.jpg" width="500" height="475" alt={$.name} />
<input class="vote" type="button" name="投票" value="投票" data-vid="<{$v.id}>"/>
</foreach>
js部分:
$(".vote").click(function(){
var vid = $(this).attr("data-vid"); //取得按钮自定义属性的值
$.ajax({
url:'index.php/vote/add', //根据自己的地址来替换
type:"post",
data:{vid:vid},
dataType:"json",
success:function(res){
if(res.status == 1)
{
alert('投票成功!'); //操作成功后执行的操作
}
else{
alert('投票失败'); //操作失败后执行的操作
}
}
})
});
}
php部分:
class VoteAction extends Action{
function add()
{
$vid = $_POST['vid'];
//执行的数据库操作,根据自己的来,并返回一个结果
$res = M('Votes')->where(array('id'=>$vid))->setInc('votes',1);
$status = 0;
$msg = '投票失败';
if($res)
{
$status = 1;
$msg = '投票成功';
}
$data = array('status'=>$status, 'msg'=>$msg);
$this->ajaxReturn($data);
}
}追问
如果我在模板文件中加入
得票数:{$v.votes}
在ajax之后,想要更新这个数值,js中该怎么写呢?
$(".vote").not(".disabled").click(function(){
var vid = $(this).attr("data-vid"); //取得按钮自定义属性的值
$.ajax({
url:'index.php/vote/add', //根据自己的地址来替换
type:"post",
data:{vid:vid},
dataType:"json",
success:function(res){
if(res.status == 1)
{
vid++;
$(this).next("p").find("span.votespan").text(vid); //把显示票数的地方显示最新的票数
$(this).addClass("disabled"); //将按钮添加一个样式,让其不可用。
}
else{
alert('投票失败'); //操作失败后执行的操作
}
}
})
});
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-12-18
你可以定义个隐藏的文本数组,然后把id赋值给value就可以了
比如<input type="hidden" id="pid" name="id[]" value="{$vo.id}">
这样你就可以用ajax获取到id的值,并传递过去了追问
比如<input type="hidden" id="pid" name="id[]" value="{$vo.id}">
这样你就可以用ajax获取到id的值,并传递过去了追问
foreach遍历之后,出来许多个id为“pid”的input,怎么取得这个value呢?用$('#pid')肯定是不行的了吧。