我是Javascript和jQuery的新手。我需要帮助,例如:
<script type="text/javascript">
$(window).load(function(){
$('#createDiv').click(function (){
$("<div/>").html("<span id='myInstance2' style='display: block;'>New Folder</span>").css("display", "none").appendTo("#results").fadeIn();
});
});
</script>
我有这个功能点击并创建一个带有文本的新<span>
标签。你可以看到我有一个ID myInstance2
。所以我想要做的就是当我点击并创建跨度时,我想让这个跨度可以实时编辑。就像我可以将这个“新文件夹”重命名为我想要的任何内容。
如果有人能提供帮助,那就太好了。在此先感谢,抱歉我的英语不好:)
答案 0 :(得分:2)
如果我抓住了我认为你想要做的事情,那就不像你想象的那样可行了。但是,有一些技巧。以下是其中之一。我们的想法是在跨度处插入一个“隐藏”输入,然后创建函数来显示输入并在需要时隐藏跨度(例如当用户点击跨度时。就像这样:
<button id="createDiv">Start</button>
<div id="results"></div>
#createDiv, #results span { cursor: pointer; }
#results div {
background: #FFA;
border: 1px solid;
margin: 1em;
padding: 1em 1em 2em;
}
#results input[type=text] {
border: none;
display: none;
outline: none;
}
// Call for document .onload event
$(function() {
// Normal Click event asignement, same as $("#createDiv").click(function
$("#createDiv").on("click", function(e) {
// Simply creating the elements one by one to remove confusion
var newDiv = $("<div />", { class: "new-folder" }), // Notice, each child variable is appended to parent
newInp = $("<input />", { type: "text", value: "New Folder", class: "title-inp" }).appendTo(newDiv),
newSpan = $("<span />", { id: "myInstance2", text: "New Folder", class: "title-span" }).appendTo(newDiv);
// Everything created and seated, let's append this new div to it's parent
$("#results").append(newDiv);
});
// the following use the ".delegate" side of .on
// This means that ALL future created elements with the same classname,
// inside the same parent will have this same event function added
$("#results").on("click", ".new-folder .title-span", function(e) {
// This hides our span as it was clicked on and shows our trick input,
// also places focus on input
$(this).hide().prev().show().focus();
});
$("#results").on("blur", ".new-folder .title-inp", function(e) {
// tells the browser, when user clicks away from input, hide input and show span
// also replaces text in span with new text in input
$(this).hide().next().text($(this).val()).show();
});
// The following sures we get the same functionality from blur on Enter key being pressed
$("#results").on("keyup", ".new-folder .title-inp", function(e) {
// Here we grab the key code for the "Enter" key
var eKey = e.which || e.keyCode;
if (eKey == 13) { // if enter key was pressed then hide input, show span, replace text
$(this).hide().next().text($(this).val()).show();
}
});
})
答案 1 :(得分:1)
你可以做的是在一个封闭的静态元素上放置一个委托的事件处理程序,其中span将驻留在#results
。处理程序将隐藏span
并显示input
。我不太清楚您的代码,但您可能希望input
上的ID而不是跨度。你没有说你想从可编辑回到“只读”所以我没有这样做。
<强> DEMO 强>
$('#createDiv').on('click', function () {
var str = "Click here to edit it"; // New Folder
$("<div/>").html("<span id='myInstance2' class='editToggler' style='display: block;'>" + str + "</span><input class='editToggler' style='display: none' value='" + str + "'/>").appendTo("#results").fadeIn();
$(this).off('click');
});
$('#results').on('click', 'span', function () {
$('.editToggler').toggle();
});
答案 2 :(得分:0)
这应该有效,并且比其他答案(imo)简单得多:
<script type="text/javascript">
$(window).load(function(){
$('#createDiv').click(function (){
$("<div />").html("<span onclick='$(this).html(prompt(\"Rename \"+$(this).html()))' id='myInstance2' style='display: block; cursor:pointer;'>New Folder</span>").css("display", "none").appendTo("#results").fadeIn();
});
});
</script>
单击span
时,系统将提示您输入新名称。为了直观地表示您创建的span
是可点击的,我还在cursor:pointer
的样式中添加了span
。
编辑:P.S:您是否使用此方法创建了多个span
?如果是这样,您应该动态创建id
,因为id
是唯一的。如果您希望所有span
的字符串相同,则可以将其设置为class
。