2016-03-28 3 views
0

Ich habe ein Kontrollkästchen im Frontend, und möchte Datenbank entsprechend dem Status der Checkbox aktualisieren, ich habe auch speichern Schaltfläche zu übermitteln.Javascript Funktion exute automatisch in web2py

Jetzt war ich verwirrt. Jedes Mal, wenn ich auf die ChangeActive/ID-Seite wechsle, ohne die Schaltfläche zu klicken, wird die Datenbank direkt aktualisiert.

Warnung funktioniert gut.

Dies ist der Code in der Steuerung:

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() 

Dies ist der Code in 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> 

Antwort

0

Es scheint, Sie Python-Funktionen erwarten vom Browser ausgeführt werden, nachdem die Seite hat wurde geladen. So funktionieren web2py-Vorlagen nicht. Die Vorlagen enthalten Python-Code, der vor dem Senden der Seite an den Browser auf dem Server ausgeführt wird. Daher werden die Aufrufe an die change() Funktion ausgeführt, bevor die Seite jemals den Browser erreicht.

Wahrscheinlich möchten Sie stattdessen einen Ajax-Aufruf im Browser auslösen, der eine separate Funktion auf dem Server aufrufen würde, um das Update zu verarbeiten. Sie können dies über jQuery (oder andere geeignete Javascript-Optionen) behandeln, oder verwenden Sie web2py eingebaute Javascript ajax() Funktion, wie beschrieben here.