2

I'm trying to save a form field using Angularjs x-editable. In the given example on their website, they use a save button to save the fields. However, I am trying to acheive the save functionality without pressing the save button. Instead I want to be able to save whenever I press enter key on any of the editable fields (Name, status, group). I know this is achievable on a traditional form by pressing enter but that does not seem to work in this case.

Here is the link http://vitalets.github.io/angular-xeditable/#editable-form

and the JSFiddle. http://jsfiddle.net/NfPcH/93/ .

Any help is appreciated, thanks.

HTML

    <h4>Angular-xeditable Editable row (Bootstrap 3)</h4>
<div ng-app="app" ng-controller="Ctrl">
   <table class="table table-bordered table-hover table-condensed">
    <tr style="font-weight: bold">
      <td style="width:35%">Name</td>
      <td style="width:20%">Status</td>
      <td style="width:20%">Group</td>
      <td style="width:25%">Edit</td>
    </tr>
    <tr ng-repeat="user in users">
      <td>
        <!-- editable username (text with validation) -->
        <span editable-text="user.name" e-name="name" e-form="rowform" onbeforesave="checkName($data, user.id)" e-required>
          {{ user.name || 'empty' }}
        </span>
      </td>
      <td>
        <!-- editable status (select-local) -->
        <span editable-select="user.status" e-name="status" e-form="rowform" e-ng-options="s.value as s.text for s in statuses">
          {{ showStatus(user) }}
        </span>
      </td>
      <td>
        <!-- editable group (select-remote) -->
        <span editable-select="user.group" e-name="group" onshow="loadGroups()" e-form="rowform" e-ng-options="g.id as g.text for g in groups">
          {{ showGroup(user) }}
        </span>
      </td>
      <td style="white-space: nowrap">
        <!-- form -->
        <form editable-form name="rowform" onbeforesave="saveUser($data, user.id)" ng-show="rowform.$visible" class="form-buttons form-inline" shown="inserted == user">
          <button type="submit" ng-disabled="rowform.$waiting" class="btn btn-primary">
            save
          </button>
          <button type="button" ng-disabled="rowform.$waiting" ng-click="rowform.$cancel()" class="btn btn-default">
            cancel
          </button>
        </form>
        <div class="buttons" ng-show="!rowform.$visible">
          <button class="btn btn-primary" ng-click="rowform.$show()">edit</button>
          <button class="btn btn-danger" ng-click="removeUser($index)">del</button>
        </div>  
      </td>
    </tr>
  </table>

  <button class="btn btn-default" ng-click="addUser()">Add row</button>
</div>

1 Answer 1

3

In my experience, the only way to do this is to capture the keydown event, passing the $event and the rowform. In the keydown handler you can evaluate the key pressed and save the form or simply save the current value to your persistent store.

...
<span editable-text="user.name" e-name="name" 
      e-form="rowform" onbeforesave="checkName($data, user.id)" 
      e-required
      e-ng-keydown="navigate($event,rowform)">
  {{ user.name || 'empty' }}
</span>
...

Then, in your controller

$scope.navigate = function(event,form) {
  if (event.keyCode==13) {
    //...Enter Key Processing
  } else if (event.keyCode==27) {
    //...Escape key processing
  } else if (...other key codes) 
    //...Et cetera
}

You can use rowform.$submit() to submit the form.

hope this helps. Good luck

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.