为什么我的匿名关闭只执行一次?

时间:2015-07-04 15:57:45

标签: javascript jquery

我想在我的列表应用中添加一项功能,允许用户在页眉收到NotFoundError: DOM Exception 8: An attempt was made to reference a Node in a context where it does not exist事件时重命名其列表的标题内嵌。

我找到了一些允许内联编辑的代码(fiddle here。)

但是,当我在自动执行的匿名闭包中将此代码包含在我的应用中时,我只能重命名列表一次。 重命名列表的后续尝试会引发:<!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="_css/bootstrap.css"></> <link rel="stylesheet" type="text/css" href="_css/noted.css"></> </head> <body> <div class="row"> <div class="col-md-3 col-md-offset-2"> <div id="listHeader"><form><input type="hidden" name="hiddenField" /></form></div> <div style="height: 50px;"></div> <form class="form-group"> <label for="listName">Note</label> <input type="text" class="form-control" id="listName" placeholder="New List"> <div style="height: 10px;"></div> <button id="newList" type="button" class="btn btn-primary">New List</button> <div style="height: 10px;"></div> <label for="itemContent">Item</label> <input type="text" class="form-control" id="itemContent" placeholder="Text input"> <div style="height: 10px;"></div> <button id="addItem" type="button" class="btn btn-primary">Add item</button> </form> <div id="listMaster"></div> </div> <div style="height: 75px;"></div> <div id="sidebar" class="col-md-2 col-md-offset-1" style="border: 1px black dashed;">sidebar <ul id="listList"></ul> </div> </div><!-- row --> <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript" src="_lib/_js/bootstrap.js"></script> <script type="text/javascript" src="_lib/_js/noted.js"></script> </body> </html> (function () { var listName, listMaster, crrntActvLst, inActvLsts, itemNos, replaceWith = $('<input name="temp" type="text" />'), connectWith = $('input[name="hiddenField"]'); (function () { $.fn.inlineEdit = function(replaceWith, connectWith) { $(this).hover(function() { $(this).addClass('hover'); }, function() { $(this).removeClass('hover'); }); $(this).click(function() { var elem = $(this); elem.hide(); elem.after(replaceWith); replaceWith.focus(); replaceWith.blur(function() { if ($(this).val() != "") { connectWith.val($(this).val()).change(); elem.text($(this).val()); } $(this).remove(); elem.show(); }); }); }; }()); $('#newList').on('click', function (){ listName = $('#listName').val(); listMaster = $('#listMaster'); // crrntActvLst = $('#listMaster ul.active'); // inActvLsts = $('#listName ul.inactive'); $('#listMaster ul').addClass('inactive') .removeClass('active') .fadeOut(); $('#listHeader').html('<h3 class="inplace-editor">' + listName + '</h3>'); // displays currently active (new) list in header $('#listMaster').prepend('<ul' + ' id="' + listName + '"' + ' class="active"' + '></ul>'); // adds new list to #listMaster $('#listList').prepend('<li class="list-group-item" ' + 'data-title="' + listName + '"' + '>' + listName + '</li>'); //adds list title to #sidebar. }); //add new list event handler $('#listHeader').on('click', 'h3', function () { $(this).inlineEdit(replaceWith, connectWith); }); //inline rename code }());

My fiddle here

然而,上面jsFiddle中的原始代码允许用户根据需要多次重命名单击的文本。

只需要第二双眼睛。无法理解为什么这段代码只能运行一次,然后对我来说错误,但在它的起源小提琴中完美无缺。

this

1 个答案:

答案 0 :(得分:0)

好的,仔细观察......

replacewith定义一次(在开头),但稍后在模糊事件中删除($(this).remove())。我没有看到它再次添加到哪里,所以它只能工作一次。