console.clear(); 'use strict'; function validateText(value) { return value !== '' ? true : false; } function saveValue(value) { console.log('save to server: ' + value); } $('body').on('click', '[editable]', function(event) { event.preventDefault(); var $element = $(this); var events = { aftersave: $element.attr('editable-aftersave') ? $element.attr('editable-aftersave') : null, beforesave: $element.attr('editable-beforesave') ? $element.attr('editable-beforesave') : null }; var type = $element.attr('editable'); function endEdit() { $element .insertAfter(this) .text( $(this).val() ); if (events.aftersave) window[events.aftersave]($(this).val()); $(this).remove(); } $('') .insertAfter($element) .attr('type', type) .val( $element.text() ) .focus() .select() .on('keyup', function(event) { if (event.which === 13) { if (events.beforesave) { var result = window[events.beforesave]($(this).val()); if (result) { endEdit.call(this); } } else { endEdit.call(this); } } else if (event.which === 27) { $(this).trigger('blur'); } }) $('