使用 JavaScript/JQuery 创建多字段就地编辑器

发布于 2024-09-08 20:47:13 字数 387 浏览 4 评论 0原文

我正在寻找一种在 JavaScript 中创建就地编辑器的方法,例如 JEditable 或类似插件。然而,不同之处在于我的编辑器将是多字段表单而不是单字段。

由于相同的表单将用于不同的部分,即编辑现有项目和创建新项目,我希望能够为每种情况指定回调函数,而不必重复共享功能(例如验证、取消按钮等) .)。

目前,我尝试天真地实现它,代码看起来很糟糕,因为事件处理程序分散在源代码中,而不是作为一个组件在一起。

所以我的问题是推荐的实现方法是什么?如果有一个 jQuery 插件提供该功能,那可能是最简单的途径。否则,我将如何正确构建我的代码?

I am looking for a way to create an in-place editor in JavaScript like JEditable or similar plugins. However, the difference is that my editor would be a multi-field form rather than single field.

Since the same form will be used in different parts, i.e. editing existing items and creating new items, I would like to be able to specify the callback function for each case while not having to duplicate the shared functionality (e.g. validation, cancel button, etc.).

Currently I tried implementing it naively and the code looks awful as event handlers are scattering around the source code instead of being together as a component.

So my question is what is the recommended way to implement this? If there is a jQuery plugin that provide the functionality, that might be the easiest route. Otherwise, how would I structure my code properly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Bonjour°[大白 2024-09-15 20:47:13

分离回调的定义并在可编辑回调中查找所需的回调

var callbacks = {  // define your callbacks here
  'field1': function() {
    alert("You editted field1");
  },
  'field2': function() {
    alert("You editted field2");
  }
}

$("input").each(function(i, o) {
  $(o).editable('save.php', {
    'callback': function(value, settings) {
       // do validation etc.

       // then call field-specific callback
      if(callbacks[o.name]) {  // I'm using 'name', but you could also use 'id' or something else
         callbacks[o.name]();
      }
    }
  });
});

Seperate the definition of your callbacks and do a lookup in the editable callback to your desired callback

var callbacks = {  // define your callbacks here
  'field1': function() {
    alert("You editted field1");
  },
  'field2': function() {
    alert("You editted field2");
  }
}

$("input").each(function(i, o) {
  $(o).editable('save.php', {
    'callback': function(value, settings) {
       // do validation etc.

       // then call field-specific callback
      if(callbacks[o.name]) {  // I'm using 'name', but you could also use 'id' or something else
         callbacks[o.name]();
      }
    }
  });
});
故事灯 2024-09-15 20:47:13

问题是您需要将数据与显示的文本分开。对于显示的每个数据块,将 json 字典(写入页面或使用 ajax 拉取)与表单中每个字段的文本相关联。

例如,如果您正在使用名称(名字,中间,最后),您将显示如下名称:

<span class="editable">Colin M. Hansen</span>

并且您编写如下形式的表单:

<form class="nameform" style="display: none;">
     <input class="first" type="text">
     <input class="mi" type="text">
     <input class="last" type="text">
</form>

并且您有一个像这样的字典,映射到表单中的输入

name1 = {
    first: 'Colin',
    mi: 'M',
    last: 'Hansen'
};

:您编写的通用代码会在 span 元素的 onclick 上切换文本的表单,并使用字典中的数据填充每个输入字段。提交代码将新数据保存到 name1 和服务器,并返回新的显示文本。

The problem is that you need to separate the data from the displayed text. For each chunk of data you display, associate a json dict (written into the page, or pulled with ajax) with the text for each field in the form.

For example, if you're working with names (first, middle, last), you display the name like this:

<span class="editable">Colin M. Hansen</span>

and you write the form like this:

<form class="nameform" style="display: none;">
     <input class="first" type="text">
     <input class="mi" type="text">
     <input class="last" type="text">
</form>

and you have a dict like this, mapped to the inputs in the form:

name1 = {
    first: 'Colin',
    mi: 'M',
    last: 'Hansen'
};

The common code you write switches the form in for the text on the onclick of the span element, and fills each input field with data from the dict. The submit code saves the new data to name1 and to the server, and returns the new display text.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文