2016-03-28 66 views
0

我在前端有一个复选框,并且想根据复选框的状态更新数据库,我也有保存按钮来提交。在web2py中自动执行Javascript函数

现在我感到困惑。每次我转向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

看样子你期待的Python功能页面有后,由浏览器执行的代码已加载。这不是web2py模板的工作方式。模板包括Python代码,在页面发送到浏览器之前,在服务器上执行。因此,在页面到达浏览器之前,才会调用change()函数。

你可能想要做的是在浏览器中触发一个Ajax调用,该调用将在服务器上调用一个单独的函数来处理更新。您可以通过jQuery(或其他合适的Javascript选项)处理,或使用web2py的内置Javascript ajax()函数,如here所述。