Проблемы с использованием jeditable и autogrow

Я работаю над веб-проектом, используя jQuery и CakePHP. Я использую легкомысленный как плагин для редактирования на месте. Для текстовых полей я расширяю его с помощью плагин autogrow.

Ну, у меня с этим две проблемы:

  • Во-первых, автоматическое увеличение работает только в Firefox, но не в IE, Safari, Opera и Chrome.
  • Во-вторых, мне нужно событие обратного вызова для jeditable, когда он закончит показывать компонент редактирования, чтобы пересчитать полоса прокрутки

Я не так хорошо знаком с Javascript, поэтому я не могу самостоятельно расширять / исправлять эти две библиотеки. Кто-нибудь использовал другую js-библиотеку для редактирования на месте с автоматически растущими текстовыми полями (нет полных редакторов, таких как TinyMCE, мне нужно решение для простого текста)?

Я также нашел Growfield, он будет работать для других браузеров, но нет jeditable интеграции ...

(Извините за мой английский)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
5 820
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я не видел никаких проблем с использованием Autogrow с jeditable в любых браузерах, но вот реализация Growfield с jeditable. Он работает примерно так же, как плагин Autogrow для jeditable. Вы создаете специальный тип ввода для jeditable и просто применяете к нему .growfield (). Необходимый javascript ниже, демо может быть найдено здесь.

<script type = "text/javascript">
/*  This is the growfield integration into jeditable
    You can use almost any field plugin you'd like if you create an input type for it.
    It just needs the "element" function (to create the editable field) and the "plugin"
    function which applies the effect to the field.  This is very close to the code in the
    jquery.jeditable.autogrow.js input type that comes with jeditable.
 */
$.editable.addInputType('growfield', {
    element : function(settings, original) {
        var textarea = $('<textarea>');
        if (settings.rows) {
            textarea.attr('rows', settings.rows);
        } else {
            textarea.height(settings.height);
        }
        if (settings.cols) {
            textarea.attr('cols', settings.cols);
        } else {
            textarea.width(settings.width);
        }
        // will execute when textarea is rendered
        textarea.ready(function() {
            // implement your scroll pane code here
        });
        $(this).append(textarea);
        return(textarea);
    },
    plugin : function(settings, original) {
        // applies the growfield effect to the in-place edit field
        $('textarea', this).growfield(settings.growfield);
    }
});

/* jeditable initialization */
$(function() {
    $('.editable_textarea').editable('postto.html', {
        type: "growfield", // tells jeditable to use your growfield input type from above
        submit: 'OK', // this and below are optional
        tooltip: "Click to edit...",
        onblur: "ignore",
        growfield: { } // use this to pass options to the growfield that gets created
    });
})

Спасибо, Алекс! Ваш плагин Growfield работает. Тем временем мне удалось решить другую проблему. Я взял еще один Свиток-Библиотека и взломал событие обратного вызова в jeditable-plugin. Это было не так сложно, как я думал ...

рыцарь-убийца: Что значит Autogrow работает только с FireFox? Я только что тестировал FF3, FF2, Safari, IE7 и Chrome. Прекрасно работает со всеми из них. У меня не было Opera.

Алекс: Есть ли ссылка для загрузки вашего пользовательского ввода Growfield Jeditable? Я хотел бы добавить ссылку из своего блога. Это действительно здорово!

Я точно не знаю, в чем была ошибка ... Я получил javascript-Error в IE7 в Autogrow-Library, когда я щелкнул элемент, который должен быть редактируемым. Texarea показывала, но без автоматического роста. В других браузерах я не получал сообщения об ошибке ...

Roman Ganz 03.10.2008 17:26

Мика Туупола: Если вас интересует мой измененный jeditable (добавлены два события обратного вызова), вы можете получи это здесь. Было бы здорово, если бы вы представили эти события в своей официальной версии jeditable!

Вот мой (упрощенный) код интеграции. Я использую события не только для эффекта наведения. Это всего лишь один вариант использования.

$('.edit_memo').editable('/cakephp/efforts/updateValue', {
  id            : 'data[Effort][id]',
  name          : 'data[Effort][value]',
  type          : 'growfield',
  cancel        : 'Abort',
  submit        : 'Save',
  tooltip       : 'click to edit',
  indicator     : "<span class='save'>saving...</span>",
  onblur        : 'ignore',
  placeholder   : '<span class = "hint">&lt;click to edit&gt;</span>',
  loadurl       : '/cakephp/efforts/getValue',
  loadtype      : 'POST',
  loadtext      : 'loading...',
  width         : 447,
  onreadytoedit : function(value){
    $(this).removeClass('edit_memo_hover'); //remove css hover effect
  },
  onfinishededit : function(value){
    $(this).addClass('edit_memo_hover'); //add css hover effect
  }
});

Другие вопросы по теме