2

私は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。だから私がやろうとしているのは、クリックしてスパンが作成されたときに、このスパンをライブ編集可能にしたいということです。この「新しいフォルダー」の名前を好きな名前に変更できるように。

誰かがそれを助けることができれば、それは素晴らしいことです。事前に感謝し、私の下手な英語で申し訳ありません:)

4

3 に答える 3

2

あなたがやろうとしていることを私が見つけたとしても、あなたが想像するほど実現可能ではありません。ただし、コツがあります。以下はその一つです。アイデアは、スパンがある場所に「非表示の」入力を挿入し、必要に応じて入力を表示してスパンを非表示にする関数を作成することです(ユーザーがスパンをクリックしたときなど)。

jsフィドル

HTML

<button id="createDiv">Start</button>
<div id="results"></div>

CSS

#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;
}

JavaScript

//  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();
        }
    });
})
于 2013-05-06T15:58:19.900 に答える
1

あなたができることは、スパンが存在する外側の静的要素に委任されたイベントハンドラーを置くことです#results。ハンドラーは を非表示にし、spanを表示しinputます。私はあなたのコードを十分に知りませんがinput、スパンの代わりに id が必要になる可能性があります。あなたは編集可能から「読み取り専用」に戻したいと言っていなかったので、私はそうしませんでした。

デモ

    $('#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();
    });
于 2013-05-06T15:56:24.840 に答える