jQuery就地编辑器使用jQuery自动完成输入字段

时间:2012-10-04 03:40:16

标签: javascript jquery autocomplete edit-in-place

背景

创建一个使用Dave Hauenstein的edit-in-place和jQuery的autocomplete插件的WYSIWYG编辑器。

源代码

代码包含以下部分:HTML,就地编辑和自动填充。

HTML

成为就地编辑文本字段的HTML元素:

<span class="edit" id="edit">Edit item</span>

就地编辑

使用“就地编辑”插件的JavaScript代码:

  $('#edit').editInPlace({
    url           : window.location.pathname,
    hover_class   : 'inplace_hover',
    params        : 'command=update-edit',
    element_id    : 'edit-ac',
    on_edit       : function() {
      return '';
    }
  });

on_edit是用户点击关联的span元素时调用函数的自定义代码。返回的值用于为文本输入字段设定种子。从理论上讲,插件应该用span元素替换DOM中的input元素,类似于:

<input type="text" id="edit-ac" />

自动填充

自动填充代码:

  $('#edit-ac').autocomplete({
    source    : URL_BASE + 'search.php',
    minLength : 2,
    delay     : 25
  });

问题

自动完成代码的时间似乎与编辑就地代码的时间不一致。

我认为在 autocomplete字段添加到DOM后,编辑就地插件需要调用input代码段

问题

如何集成这两个插件,以便当用户点击“就地编辑”字段时,自动完成代码会在通过编辑添加的DOM元素上提供自动完成功能?

谢谢!

1 个答案:

答案 0 :(得分:2)

解决方案

通过指示代码在输入字段上附加标识符来修改jQuery就地编辑器源代码。

jQuery就地编辑器更新

此部分详细说明了所需的更新。

类型定义

在默认设置中提供新属性:

  editor_id:    "inplace_id", // default ID for the editor input field
  on_create:    null, // function: called after the editor is created

inputNameAndClass

更改inputNameAndClass功能以使用editor_id设置:

  /**
   * Returns the input name, class, and ID for the editor.
   */
  inputNameAndClass: function() {
    var result = ' name="inplace_value" class="inplace_field" ';

    // DJ: Append the ID to the editor input element.
    if( this.settings.editor_id ) {
      result += 'id="' + this.settings.editor_id + '" ';
    }

    return result;
  },

replaceContentWithEditor

更改replaceContentWithEditor功能以调用创建功能:

  replaceContentWithEditor: function() {
    var buttons_html  = (this.settings.show_buttons) ? this.settings.save_button + ' ' + this.settings.cancel_button : '';
    var editorElement = this.createEditorElement(); // needs to happen before anything is replaced
    /* insert the new in place form after the element they click, then empty out the original element */
    this.dom.html('<form class="inplace_form" style="display: inline; margin: 0; padding: 0;"></form>')
      .find('form')
        .append(editorElement)
        .append(buttons_html);

    // DJ: The input editor is part of the DOM and can now be manipulated.
    if( this.settings.on_create ) {
      this.settings.on_create( editorElement );
    }
  },

自动完成耦合

现在可以激活自动填充功能,显示就地编辑。

联合召集

HTML代码段与以前一样。对editInPlace的新调用类似于:

  $('#edit').editInPlace({
    url           : window.location.pathname,
    hover_class   : 'inplace_hover',
    params        : 'command=update-edit',
    editor_id     : 'edit-ac',
    on_create     : function( editor ) {
      $('#edit-ac').autocomplete({
        source    : URL_BASE + 'search.php',
        minLength : 2,
        delay     : 25
      });
    },
    on_edit       : function() {
      return '';
    }
  });

只要激活就地编辑器,就会将自动完成功能附加到就地编辑器。