2017-03-20 7 views
2

これは構文の質問ですが、私が探しているものに答える質問は見つからないようです。そこにはたくさんのものがあります。拘束力のあるもの、または「適用する」ものがあるかもしれませんが、私はこの文脈でそれらをどのように使用するかを理解できません。Enterキーイベントに "this"を渡すにはどうすればいいですか?

私は、発射されると、スパンを入力に変えて編集できる機能を持っています。次に、フォーカスがオフ(ぼかし)になると、新しいテキストが保存されます。これまでのところ、私が望むのと全く同じように動作します。キーを入力しても同じことができればいいと思っていましたが、イベントの仕組みを理解することはできません。

function span_into_textarea() { 
    var old_text = $(this).text(); 
    var editableText = $("<input type='text' />"); 
    editableText.val(old_text); 
    $(this).replaceWith(editableText); 
    editableText.focus(); 
    editableText.blur(textarea_into_span); 
    editableText.keypress(function (e) { 
     if (e.which == 13) {textarea_into_span()} 
    }); // THIS DOESNT PASS ANYTHING TO "THIS" 
    editableText.keypress(textarea_into_span); //THIS WORKS BUT I CAN'T KNOW WHICH KEY WAS PRESSED 
} 

function textarea_into_span() { 
    var new_text = $(this).val(); 
} 

ありがとうございました!

+0

[Enterキーに機能を実行する]の可能複製(http://stackoverflow.com/questions/16011312/execute -function-on-enter-key) – Liam

答えて

2

あなたはを渡すためにcallを使用することができます参照:

editableText.keypress(function (e) { 
    if (e.which == 13) {textarea_into_span.call(this)} //will refer to editableText 
}); 
+1

これは完全に機能します。ありがとうございました! –

+0

あなたは 'bind'、' call'、 'apply'の3つの関数を持っています。それを調べることは価値があります。 – Mouser

2
  1. bindeditableText.keypress(textarea_into_span.bind(this))(イベントは引数として渡されます)。
  2. あなたが(彼らはそれが親コンテキストで検索され thisに結合しない) arrow functiontextarea_into_spanを置き換えることが
  3. :@Mouserによって示唆されるように

    editableText.keypress((e) => { 
        if (e.which == 13) { 
        var new_text = $(this).val(); 
        } 
    }) 
    
  4. あなたが使用することcallまたはapply

    editableText.keypress(function(e) { 
        if (e.which == 13) { 
        textarea_into_span.call(this); 
        // or textarea_into_span.apply(this) 
        } 
    }) 
    
+1

Arrowは最新のブラウザでのみ動作し、免責事項としてはすばらしいはずです。 – Mouser

1

はあなたがスコープを失った、この方法を試してみてください:

function span_into_textarea() { 
    var modify = this; 
    var old_text = $(this).text(); 
    var editableText = $("<input type='text' />"); 
    editableText.val(old_text); 
    $(this).replaceWith(editableText); 
    editableText.focus(); 
    editableText.blur(textarea_into_span(modify)); 
    editableText.keypress(function (e) { 
     if (e.which == 13) {textarea_into_span(modify)} 
    }); 
} 

function textarea_into_span(modify) { 
    var new_text = $(modify).val(); 
} 
+0

機能の範囲内にいる限り、これは機能します! – Mouser

関連する問題