2015-06-13 98 views
0

我正在用jQuery製作簡單的待辦事項列表,並且遇到了關於如何通過雙擊編輯li元素的內容的問題。我寫了一個函數,但它不起作用。li元素的jQuery編輯內容

這裏是我的代碼:http://jsfiddle.net/strangeviking/1vwho2ru/3/

function addListItem() { 
 
    var text = $('#new-text').val(); 
 
    $("#todolist").append('<li><input type="checkbox" class="edit" />' + text + ' <button class="delete">Delete</button></li>'); 
 
    $("#new-text").val(''); 
 
}; 
 

 
function deleteItem() { 
 
    $(this).parent().remove(); 
 
} 
 

 
function finishItem() { 
 
    if ($(this).parent().css('textDecoration') == 'line-through') { 
 
    $(this).parent().css('textDecoration', 'none') 
 
    } else { 
 

 
    $(this).parent().css('textDecoration', 'line-through'); 
 
    } 
 
} 
 

 
function editItem(e) { 
 
    var $input = $(e.target).closest('li').addClass('editing').find('.edit'); 
 
    $input.val($input.val()).focus(); 
 
} 
 

 
$(function() { 
 
    $('#new-text').keyup(function(e) { 
 
    if (e.keyCode === 13) { 
 
     addListItem(); 
 
    } 
 
    }); 
 
    $(document).on('click', '.delete', deleteItem); 
 
    $(document).on('click', '.edit', finishItem); 
 
    $(document).on('dblclick', '.edit', editItem); 
 
    $("#select_all").click(function() { 
 
    $('input:checkbox').not(this).prop('checked', this.checked); 
 
    if ($('li').css('textDecoration') == 'line-through') { 
 
     $('li').css('textDecoration', 'none') 
 
    } else { 
 

 
     $('li').css('textDecoration', 'line-through'); 
 
    } 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h1>List</h1> 
 

 
<input type="text" id="new-text" /> 
 
<ul id="todolist"></ul> 
 
<br> 
 
<input type="checkbox" id="select_all" />Select all

回答

0

我發現了一些其他的方法改變元素。這裏是代碼:

var oriVal; 
    $("#todolist").on('dblclick', 'span', function() { 
     oriVal = $(this).text(); 
     $(this).text(""); 
     $("<input type='text'>").appendTo(this).focus(); 
    }); 
    $("#todolist").on('focusout', 'span > input', function() { 
     var $this = $(this); 
     $this.parent().text($this.val() || oriVal); 
     $this.remove(); // Don't just hide, remove the element. 
    }); 

它需要一些改進,例如,爲可編輯可見的,而編輯它,然後按「Enter」鍵提交,但它使它的基本功能。

1

而不是使用DoubleClick進行編輯,你可以使用HTML5的contenteditable屬性。

你會做的改變是增加一個span中的文本在這條線:

$("#todolist").append('<li><input type="checkbox" class="edit" /> <span contenteditable="true">' + text + ' </span><button class="delete">Delete</button></li>'); 

function addListItem() { 
 
    var text = $('#new-text').val(); 
 
    $("#todolist").append('<li><input type="checkbox" class="edit" /><span contenteditable="true">' + text + ' </span><button class="delete">Delete</button></li>'); 
 
    $("#new-text").val(''); 
 
}; 
 

 
function deleteItem() { 
 
    $(this).parent().remove(); 
 
} 
 

 
function finishItem() { 
 
    if ($(this).parent().css('textDecoration') == 'line-through') { 
 
    $(this).parent().css('textDecoration', 'none') 
 
    } else { 
 

 
    $(this).parent().css('textDecoration', 'line-through'); 
 
    } 
 
} 
 

 
function editItem(e) { 
 
    var $input = $(e.target).closest('li').addClass('editing').find('.edit'); 
 
    $input.val($input.val()).focus(); 
 
} 
 

 
$(function() { 
 
    $('#new-text').keyup(function(e) { 
 
    if (e.keyCode === 13) { 
 
     addListItem(); 
 
    } 
 
    }); 
 
    $(document).on('click', '.delete', deleteItem); 
 
    $(document).on('click', '.edit', finishItem); 
 
    $(document).on('dblclick', '.edit', editItem); 
 
    $("#select_all").click(function() { 
 
    $('input:checkbox').not(this).prop('checked', this.checked); 
 
    if ($('li').css('textDecoration') == 'line-through') { 
 
     $('li').css('textDecoration', 'none') 
 
    } else { 
 

 
     $('li').css('textDecoration', 'line-through'); 
 
    } 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h1>List</h1> 
 
<input type="text" id="new-text" /> 
 
<ul id="todolist"> 
 
</ul> 
 
<br> 
 
<input type="checkbox" id="select_all" />Select all

fiddle

+0

@http://stackoverflow.com/users/3541881/%e1%94%95%e1%96%ba%e1%98%8e%e1%95%8a我怎樣才能使它的寬度限制只爲文字長度?我不想有可能刪除複選框和按鈕 –

+0

@VasylPylypiv我不明白你。如果您像示例中那樣添加了「span」,則無法刪除複選框/按鈕 - 只能編輯文本。 –

+0

@http://stackoverflow.com/users/3541881/%e1%94%95%e1%96%ba%e1%98%8e%e1%95%8a對不起,我把這段代碼寫錯了地點。現在所有工作都很完美你能否幫助我完成與此代碼相關的其他小任務?我需要寫fucntion將刪除所有選中的元素 –