2

我在一个使用jQuery和 CakePHP 的 Web 项目上工作。我使用jeditable作为就地编辑插件。对于 textareas,我使用autogrow 插件对其进行了扩展。

好吧,我有两个问题:

  • 首先,自动增长仅适用于 Firefox,不适用于 IE、Safari、Opera 和 Chrome。
  • 其次,我需要一个 jeditable 的回调事件,当它完成显示编辑组件时,重新计算滚动条

我对 Javascript 不太熟悉,所以我不能自己扩展/纠正这两个库。有没有人使用另一个 js-library 进行自动增长文本区域的就地编辑(没有像 TinyMCE 这样的完整编辑器,我需要纯文本的解决方案)?

我还找到了 Growfield,它适用于其他浏览器,但没有可编辑的集成......

(对不起我的英语不好)

4

4 回答 4

3

我没有看到在任何浏览器中使用带有 jeditable 的 Autogrow 有任何问题,但这里是带有 jeditable 的 Growfield 的实现。它的工作方式与 jeditable 的 Autogrow 插件的工作方式非常相似。您为 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
    });
})

于 2008-09-30T18:38:19.807 回答
1

knight_killer:你是什么意思 Autogrow 只适用于 FireFox?我刚刚用 FF3、FF2、Safari、IE7 和 Chrome 进行了测试。与所有这些都很好。我没有 Opera。

亚历克斯:您的 Growfield Jeditable 自定义输入是否有下载链接?我想从我的博客链接它。真的很棒!

于 2008-10-02T08:56:22.667 回答
1

Mika Tuupola:如果你对我修改过的 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
  }
});
于 2008-10-03T13:46:54.977 回答
0

谢谢亚历克斯!您的 growfield-Plugin 有效。与此同时,我设法解决了另一个问题。我拿了另一个Scroll-Library并将一个回调事件侵入到 jeditable-plugin 中。并没有我想的那么难……

于 2008-10-01T10:33:55.827 回答