我在前端有一个复选框,想根据复选框的状态更新数据库,我也有保存按钮提交。
现在我感到困惑。每次我转向changeActive / id页面,而不点击按钮,它直接更新数据库。
警报工作正常。
这是控制器中的代码:
def changeActive():
post=db.student(request.args(0,cast=int))
def change(value):
changeStatus=db(db.student.id==post.id).update(is_active=value)
return changeStatus
return locals()
这是changeActive.html
中的代码{{extend 'layout.html'}}
<h1>it is a test</h1>
<h2>{{=post.name}}</h2>
<h2>{{=post.id}}</h2>
<h2>{{=post.is_active}}</h2>
<input type=checkbox id=is_active>
<input id="save" type="button" value="save"/>
<script type="text/javascript">
window.onload=function()
{
var saveButton=document.getElementById('save');
saveButton.onclick=function()
{
var changeSt=document.getElementById('is_active');
if (changeSt.checked)
{
alert('active')
{{change('T')}}
}
else
{
alert ('not active')
{{change('F')}}
}
};
};
</script>
答案 0 :(得分:0)
在页面加载后,您似乎期望浏览器执行Python函数。这不是web2py模板的工作方式。模板包括Python代码,在将页面发送到浏览器之前在服务器上执行 。因此,在页面到达浏览器之前,会发生对change()
函数的调用。
您可能想要做的是在浏览器中触发Ajax调用,这将调用服务器上的单独函数来处理更新。您可以通过jQuery(或其他合适的Javascript选项)处理,或使用web2py的内置Javascript ajax()
函数,如here所述。