Browse Source

Merge pull request #17 from cxa/form_submit

Form submit
Namdak Tonpa 7 years ago
parent
commit
b7a1a081a4
2 changed files with 12 additions and 5 deletions
  1. 1 1
      src/actions/action_event.erl
  2. 11 4
      src/elements/element_form.erl

+ 1 - 1
src/actions/action_event.erl

@@ -11,7 +11,7 @@ render_action(#event{postback=Postback,actions=_A,source=Source,target=Control,t
     E = ?B(Control),
     ValidationSource = [ S || S <- Source, not is_tuple(S) ],
     PostbackBin = wf_event:new(Postback, E, D, event, data(E,Source), ValidationSource, V),
-    ["{var x=qi('",E,"'); x && x.addEventListener('",?B(Type),"',function (event){ ",PostbackBin,"});};"].
+    ["{var x=qi('",E,"'); x && x.addEventListener('",?B(Type),"',function (event){ event.preventDefault(); ",PostbackBin,"});};"].
 
 data(E,SourceList) ->
     Type=fun(A) when is_atom(A) -> [ "atom('",atom_to_list(A),"')" ]; (A) -> [ "utf8_toByteArray('",A,"')" ] end,

+ 11 - 4
src/elements/element_form.erl

@@ -4,6 +4,13 @@
 -compile(export_all).
 
 render_element(Record) ->
+    ID = case Record#form.id of undefined -> nitro:temp_id(); I->I end,
+    case Record#form.postback of
+         undefined -> skip;
+         Postback -> nitro:wire(#event { type=submit,
+                                         target=ID,
+                                         postback=Postback,
+                                         source=Record#form.source }) end,
     List = [
       %global
       {<<"accesskey">>, Record#form.accesskey},
@@ -14,16 +21,16 @@ render_element(Record) ->
       {<<"draggable">>, case Record#form.draggable of true -> "true"; false -> "false"; _ -> undefined end},
       {<<"dropzone">>, Record#form.dropzone},
       {<<"hidden">>, case Record#form.hidden of "hidden" -> "hidden"; _ -> undefined end},
-      {<<"id">>, Record#form.id},
+      {<<"id">>, ID},
       {<<"lang">>, Record#form.lang},
       {<<"spellcheck">>, case Record#form.spellcheck of true -> "true"; false -> "false"; _ -> undefined end},
       {<<"style">>, Record#form.style},
       {<<"tabindex">>, Record#form.tabindex},
       {<<"title">>, Record#form.title},
-      {<<"translate">>, case Record#form.contenteditable of "yes" -> "yes"; "no" -> "no"; _ -> undefined end},      
+      {<<"translate">>, case Record#form.contenteditable of "yes" -> "yes"; "no" -> "no"; _ -> undefined end},
       % spec
-      {<<"accept-charset">>, Record#form.accept_charset},      
-      {<<"action">>, Record#form.action},      
+      {<<"accept-charset">>, Record#form.accept_charset},
+      {<<"action">>, Record#form.action},
       {<<"autocomplete">>, case Record#form.autocomplete of true -> "on"; false -> "off"; _ -> undefined end},
       {<<"enctype">>, case Record#form.enctype of "application/x-www-form-urlencoded" -> "application/x-www-form-urlencoded"; "multipart/form-data" -> "multipart/form-data"; "text/plain" -> "text/plain"; _ -> undefined end},
       {<<"method">>, case Record#form.method of "post" -> "post"; _ -> "get" end},