2011-01-13 3 views
7

divボックス用の簡単なインライン編集を作成しようとしています。私がdivにdblclick、私はtextareaタグでwrapInner。それはそれを編集可能にする。しかし、テキストエリアフィールドを外にクリックすると、どのようにテキストエリアのタグを展開できますか?以下は私が働いていないものです。また、私は、focusout、mouseout、mouseleaveまたはそれらのいずれかを使用する必要があります。jquery unwrap Inner

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script> 

<div id="test" style="width:300px; height:200px;"> 
    testing 
</div> 

<script type="text/javascript"> 
$("#test").live({ 
    dblclick: function() { 
     $("#test").wrapInner("<textarea/>") 
    }, 
    mouseleave: function() { 
     $("#test > textarea").unwrap() 
    } 
}); 
</script> 

答えて

4

多分あなたは多分やるべきことがいくつかあります。 dblclickハンドラ.find()新しいtextarea#test

  • 、および.focus()に直接

    $("#test").dblclick(function() { 
        $(this).wrapInner("<textarea/>").find('textarea').focus(); 
    }).delegate('textarea','blur',function() { 
        $(this).parent().text(this.value); 
    }); 
    
    • バインドdblclick場所
    • その上 .delegate() #test上ハンドラの代わりに、代わりに .live()
    • 使用blurを使用してmouseleave
    • blurハンドラでの#testtextareavalueに設定します。 (これが行われた編集を拾うために重要である。)

    例:http://jsfiddle.net/drQkp/1/


    例:ここではhttp://jsfiddle.net/drQkp/2/

    がHTMLにすることができます例ですテキストエリアに入力してください。

    $("#test").dblclick(function() { 
        $(this).html($("<textarea/>",{html:this.innerHTML})).find('textarea').focus(); 
    }).delegate('textarea', 'blur', function() { 
        $(this).parent().html(this.value); 
    }); 
    
  • +0

    これはうまくいきますが、既にテキストエリアの内側にいて、もう一度dblclickするとテキストが消えます。これは、すべてのdblclickでtextareaに別のインスタンスを作成しています。 – Hussein

    +0

    これをテストした後、unwrapの作業は行われません。それは本当にテキストエリアだけでなく、内部のすべての子タグを削除しています。単語に囲まれたスパンタグがあれば、スパンタグは削除されます。 – Hussein

    +0

    @alex:あなたは、テキストエリアに入力されたタグについて話していますか? [これは更新された例です。](http:// jsfiddle。net/drQkp/2 /)これはHTMLを許可し、 'wrap'タイプのメソッドを使用しません。 – user113716

    0

    私が知る限りアンラップは存在しません。 $('#test > textarea')を取得したら、その内容を親に割り当てます。

    <span>などの中のテキスト「テスト」で始まってから、スパンの内容をテキストエリアにコピーしてからもう一度コピーすると、エラーが発生しにくくなります。

    +0

    アンラップが存在します。http://api.jquery.com/unwrap/ – Hussein

    +0

    @alexしかし、それはDOM要素ではなく、値の内容で動作します。 –

    11

    $("#test > textarea").unwrap()は、テキストエリアをアンラップしているため、テキストエリアを削除するのではなくdiv #testを削除しています。代わりにあなたがしたい:あなたはこのdemoから見ることができるように

    $("#test > textarea").contents().unwrap() 
    

    を、mouseleaveはwrapInner後に任意のマウスの動きに即座にトリガされますので、あなたはおそらく、ダブルクリックハンドラ内テキストエリアにmouseleaveをバインドしたいです。