Add the widget to your model:
def inplace_edit(f,v):
wrapper = DIV()
inp = SQLFORM.widgets.string.widget(f,v)
lbl = SPAN(inp['_value'],_id='inplace_edit_'+inp['_id'],_style="cursor:pointer;")
scr1 = "jQuery('#%s').hide();" % inp['_id']
scr2 = "jQuery('#%s').bind('dblclick',function(e){ jQuery(this).hide();jQuery('#%s').show().focus();});" % \
(lbl['_id'],inp['_id'])
scr3 = "jQuery('#%s').bind('blur',function(e){ jQuery(this).hide();jQuery('#%s').show().text(jQuery(this).val());});" % \
(inp['_id'],lbl['_id'])
jqscr = SCRIPT(scr1,scr2,scr3,_type="text/javascript")
wrapper.components.extend([inp,lbl,jqscr])
return wrapper
Apply the widget to a field:
db.define_table("test",Field('edit',default='Double Click to edit',widget=inplace_edit))
Test it in your controller:
def index():
form = SQLFORM(db.test)
if form.accepts(request.vars,session):
response.flash = "Got it"
all = db().select(db.test.ALL)
return dict(form=form,all=all)
Demo application (right click/Save As): Download
Comments (0)