javascript - 如何使用 jQuery 制作可编辑的 UL LI 列表?

标签 javascript jquery html html-lists

我有件事需要你的帮助。我正在尝试为用户添加能够通过单击 LI 元素来实时编辑 UL LI 列表的功能。然后,单击 LI 元素后,该元素将更改为具有 LI 当前文本值的输入框元素。

然后,当用户点击 LI 元素时,输入框消失,LI 元素返回到其正常状态,并带有新更新的值。

我正在尝试完成上述操作,但是,在我的代码的当前状态下,它只是添加了另一个框,实际上不允许我在其中单击以添加新值。而且,当我点击一个新的 LI 元素时,它只会继续添加另一个框等等。

这是一个 fiddle : https://jsfiddle.net/0o0n8rea/

这是有问题的代码:

window.onload = function() {

    $("#refdocs_list li").click(function(){

        $(this).html('<input type="text" value='+ $(this).text() +'>').focus()

    });

    $("#refdocs_list li").focusout(function(){

    });

}

这是 HTML 标记:

<div class="field_outline" style="background: #FFF; min-height: 75px; max-height: 300px; overflow-y: auto;">

    <ul id="refdocs_list" style="list-style-type: none; margin: 0; padding: 3px 0px 3px 3px;">

        <li>test1</li>
        <li>test2</li>
        <li>test3</li>

    </ul>

</div>

最佳答案

您可以使用 span 包裹您的文本,然后使用 input 替换该元素,反之亦然,使用 jQuery 的 replaceWidth() 和作为选择器的通用属性,例如 data-id="editable-list-item" 或其他。

类似于此:

$("#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>

关于javascript - 如何使用 jQuery 制作可编辑的 UL LI 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45985601/

相关文章:

jquery - Srobbin 页面幻灯片编辑失败。请

javascript - 数据表 - 当未显示所有列时如何禁用表中最后一列的排序

javascript - {{#if currentUser}} 太慢

c# - 从 Controller 动态返回 javascript 函数并将其传递给 cshtml

javascript - 使事件发射器同步

html - 在 Bootstrap col 中定位绝对项

javascript - 动态添加新字段会重置先前字段中的值

javascript - 自定义 React Native UI 组件 : Invariant Violation

javascript - 使用 Jquery 根据输入显示和隐藏元素

javascript - 获取响应式 Javascript 菜单以堆叠在 img 下。