我正在尝试找到在双击时使列表元素可编辑的最佳方法。如果我有这样的设置:jsfiddle
HTML
<ul>
<li>Hello</li>
<li>World</li>
</ul>
JS
$('li').dblclick(function() {
//something here?
});
对双击操作进行编码的最佳方法是什么才能让我更改单击列表元素的值?
答案 0 :(得分:6)
$('li').dblclick(function() {
this.contentEditable=true
$(this).on('keypress blur', function(e) {
if(e.keyCode&&e.keyCode==13||e.type=='blur'){
this.contentEditable=false
return false
}
});
$(this).focus()
});
修改强>
添加焦点()。 thx @ L105
答案 1 :(得分:2)
在HTML5中,您可以使用contenteditable
。单击window
以删除属性。
编辑 - 我结合了一些答案,这应该可以胜任:
$('li').on({
dblclick: function() {
$(this).attr('contenteditable', 'true').focus();
},
keydown : function(e) {
if(e.keyCode && e.keyCode === 13) {
e.preventDefault();
$(this).blur();
}
},
blur: function() {
$(this).removeAttr('contenteditable');
}
});
<强> DEMO 强>
答案 2 :(得分:1)
var $elem = $(this);
var mytext = $elem.text();
$elem.html('<input type="text" class="foo" value="' + mytext + '" />');
$('li').dblclick(function() {
var $elem = $(this);
var mytext = $elem.text();
$elem.html('<input type="text" class="foo" value="' + mytext + '" /> <span class="save">Save!</span>');
$(".save").click(function() {
var mynewtext = $(this).parent().find(".foo").val();
$elem.html(mynewtext);
});
});