【发布时间】:2020-09-07 21:57:18
【问题描述】:
$("#refdocs_list li").on('click', 'span[data-id="editable-list-item"]', function() {
var $input = $('<input type="text" data-id="editable-list-item">');
$input.val($(this).html());
$(this).replaceWith($input);
$input.focus();
});
$("#refdocs_list li").on('focusout', 'input[data-id="editable-list-item"]', function() {
var $span = $('<span data-id="editable-list-item">');
$span.html($(this).val());
$(this).replaceWith($span);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="refdocs_list" style="list-style-type: none; margin: 0; padding: 3px 0px 3px 3px;">
<li><span data-id="editable-list-item">test1</span></li>
<li><span data-id="editable-list-item">test2</span></li>
<li><span data-id="editable-list-item">test3</span></li>
</ul>
我正在开发一个待办事项列表应用程序,我想让动态添加的列表项可编辑。当用户单击列表项时,我希望他们能够更改文本并在单击列表项外部时自动保存。
我面临一些挑战,因为我在附加的列表项中有复选框和按钮元素。
我尝试了以下解决方案,但都没有奏效:
-
使用
$('.edit').editable('save.php')- 编辑元素的全部内容,以便用户实际删除按钮和复选框 -
使用
contenteditable属性 - 结果相同,允许用户编辑列表项内的所有元素。 -
我尝试将用户输入包装在一个跨度中,并且只将
class="edit"应用于该跨度,但这不起作用。请参阅 CodePen here
我正在寻找使用 jQuery Jeditable 并从头开始实施的解决方案。
这是我的代码:
let userInput = $('input').val().trim()
let removeItem = '<button id="remove">x</button>'
let checkbox = '<input type="checkbox">'
$('ol').append(`<li>${checkbox} <span class="edit">${userInput}</span> ${removeItem}</li>`);
任何帮助将不胜感激。
【问题讨论】:
-
codepen 可能只会恢复到原始值,因为 ajax 无法在此处使用相对 url 完成。一旦你弄清楚了
editable插件的机制和选项,跨度方法应该可以正常工作。如果您要存储服务器端,您还需要一些标识符来发送。我已经很长时间没有使用该插件了,但请记住它是高度可配置且强大的 -
@charlietfl - 我搞定了!现在我很难弄清楚如何在函数中保存更新的内容,因为我不想使用服务器来保存该信息。你能举个例子吗?
-
您可以学习使用
localStorage并将其存储在那里。该插件将具有可用于更新的事件回调。
标签: javascript jquery x-editable