script.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. console.clear();
  2. 'use strict';
  3. function validateText(value) {
  4. return value !== '' ? true : false;
  5. }
  6. function sendToServer(value) {
  7. console.log('Send to server', value);
  8. }
  9. $('[editable]').on('click', function(event){
  10. event.preventDefault(); // сбросили поведение элементов по молчанию, если была бы ссылка она бы не работала (защита от дурака)
  11. var $element = $(this);
  12. var type = $element.attr('editable');
  13. var events = {
  14. before: $element.attr('onbeforesave') ? $element.attr('onbeforesave') : null,
  15. after: $element.attr('onaftersave') ? $element.attr('onaftersave') : null
  16. };
  17. function onEdit() {
  18. $element.text( $(this).val() )
  19. .insertAfter(this);
  20. events.after && window[events.after]( $(this).val() );
  21. $(this).remove();
  22. }
  23. $('<input>').attr('type', type).val( $element.text() )
  24. .insertAfter($element)
  25. .focus() // при клике фокус на элементе
  26. .select() //при клике фокус на элементе и текст выделен
  27. .on('keyup', function(event) { // обработчик событий на элементе и проверяем клавиши 13 -энтер, 27 -эск
  28. if (event.which === 13) {
  29. if (events.before) {
  30. var valid = window[events.before]( $(this).val() );
  31. if (valid) {
  32. onEdit.call(this);
  33. }
  34. } else {
  35. onEdit.call(this);
  36. }
  37. } else if (event.which === 27) { //27 код клавиши esc
  38. $(this).trigger('blur'); // вызов обработчика событий путем тригера
  39. }
  40. })
  41. .on('blur', function(event) { // блюр обработчик событий которй срабатывает при потере фокуса
  42. $element.insertAfter(this);
  43. $(this).remove(); // ремув удаляет обработчик событий вместе с элементом
  44. })
  45. $element.detach(); //детач удаляет элемент но не удаляет обработчик событий на элементе
  46. });