把一个div标签变成一个输入框

Turn a div tag into a input box

我希望能够在 .editable div 中点击 h2,它应该变成一个输入框。然后你可以编辑它,当你点击它或按回车键时它会更新输入。这就是我想要的,我卡住了:

jQuery:

$('.editable').on('click', function() {
  var h3 = $(this)
  var input = $('<input>').val(h3.text())

  h3.after(input)
  h3.hide()

  input.on('blur', function(){

  })
  //blur
  //keyup code 13 -- code 27 reset

})

玉:(小事html)

  div.edit-menu-page
    div.title
      h2 Edit Menu
    div.menu-wrap
      div.menu-category
        div.menu-title
          div.editable
            h3 Meat
        div.menu-items
          div.menu-row
            span.item-description New York Striploin
            div.control-items
              span.item-price 10$
              span.delete X

.

基本上您要做的是在原始元素旁边放置一个表单元素,然后当您完成后,将表单元素替换为原始元素。

像这样的东西应该可以工作:

$(document).on('click', '.editable', function() {
    var $wrapper = $('<div class="editing"></div>'),
        $form    = $('<form action="#" class="edit-form"></form>'),
        $input   = $('<input type="text">');

    // Place the original element inside a wrapper:
    $(this).after($wrapper);
    $(this).remove().appendTo($wrapper).hide();

    // Build up the form:
    $wrapper.append($form);
    $form.append($input);
    $input.val($(this).text()).focus();
});

$(document).on('submit', '.edit-form', function(e) {
    // Don't actually submit the form:
    e.preventDefault();

    var val       = $(this).find('input').val(),
        $wrapper  = $(this).parent(),
        $original = $wrapper.children().first();

    // Use text() instead of html() to prevent unwanted effects.
    $original.text(val);
    $original.remove();
    $wrapper.after($original);
    $original.show();
    $wrapper.remove();
});

编辑:这是 JSFiddle:http://jsfiddle.net/c0fb11qw/1/

这里是一个快速的答案,http://codepen.io/someyoungideas/pen/mJWLXE。看起来 Jade 与 jQuery 的输入方式不太协调,因为它在输入中增加了一些间距。

$('.editable').on('click', function() {
  var h3 = $(this)
  var input = $('<input>').val(h3.text())

  h3.after(input)
  h3.hide()

  input.on('blur', function(){
      h3.text(input.val());
      h3.show();
      input.hide();
  })
  //blur
  //keyup code 13 -- code 27 reset

})

这是您需要的:

正在工作的 JsFiddler:https://jsfiddle.net/t0hjxxgy/

HTML

<div class="editable">
    <h3>Edit me</h3>
</div>

JS

$('.editable').on('click', function() {
    var $editable = $(this);
    if($editable.data("editing")) {
       return;
    }

    $editable.data("editing", true);
  var h3 = $("h3", this);
  var input = $('<input />').val(h3.text())

  h3.after(input);
  h3.hide();

  input.on('blur', function(){
      save();
  })
  input.on('keyup', function(e){
      if (e.keyCode == '13') {
          save();
      }
      if (e.keyCode == '27') {
          reset();
      }
  })

  function save() {
      h3.text(input.val());
      input.remove();
      h3.show();
      $editable.data("editing", false);
  }

    function reset () {
        input.remove();
      h3.show();
      $editable.data("editing", false);
    }
})

<div contenteditable="true">
  This text can be edited by the user.
</div>

完整信息:https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Editable_content