2017-03-09 5 views
0

jsを介して動的に作成された要素と要素をhtmlページに追加しました。jquery/JSダイナミックコントロール用のシンプルなデータバインド

<input type="text" id="MyInput" name="MyInput" 
class='form-control copyMe' placeholder="enter smth pls"/> 
<div id="jsonTextAreaDiv" contenteditable="true"> 
<span id="MyInput_JSON"></span> 
</div> 

入力から入力までのテキストバインディングが必要です。とにかく...

$(document).on('input', 'input.copyMe', function(){ 
    var valToInsert = $(this).val(); 
    var idToInsert = $(this).attr("id") + "_JSON";   
    document.getElementById(idToInsert).innerHTML = valToInsert; 
}); 

は1行jqueryの内のすべてのかもしれないが、:

だから、私は次のJSで行きます。 このバインディングは、入力するテキストの入力中に正常に機能します。 しかし、一度入力がフォーカスを失うと、突然スパンが内側のテキストを失います。 私は理由を知らない。これはちょうど私の質問です、どうしたのですか?

は私が

$(document).on('input', 'input.copyMe', function(){ 
    var valToInsert = $(this).val(); 
var idToInsert = $(this).attr("id") + "_JSON";   
    document.getElementById(idToInsert).innerHTML=valToInsert; 
}).on('blur', '.copyMe', function(){ 
var valToInsert = $(this).val(); 
    var idToInsert = $(this).attr("id") + "_JSON";   
    document.getElementById(idToInsert).innerHTML=valToInsert;}); 

私はそれをしたいようにそれが動作します。この方法を追加することで、この問題を「回避」しました。しかし、これはばかげている。 最初の場所でスパンから値が消えるのはなぜですか?

ありがとうございます。

+0

コードが正常に動作しているようです。問題の再現をスニペットで、またはhttp://jsfiddle.netを作成して複製できますか? – Ionut

答えて

1

inputイベントを変更して、代わりにchangeイベントを使用してください。 IEは 'input'イベントを正しくサポートしていません。また、keyupイベントを試すこともできます。

$(document).on('change', 'input.copyMe', function(){ 
    var valToInsert = $(this).val(); 
    var idToInsert = "#" + $(this).attr("id") + "_JSON";   
    $(idToInsert).html(valToInsert); 
}); 

また、最後の行もjQueryに変更しました。 jQueryとpure JSを混在させる必要はありません。あなたが一律にしておくと、読みやすくなります。

+0

"change"イベントスパンではテキストが失われません。しかし、それは動的にそれを取得しません。 最初の問題(スパンが失われたテキストを含む)がなくなったことはわかりますが。 "入力"、 "キーアップ"、 "キーダウン"などのイベントでなぜそれが起こっているのか詳しく教えてください。 (btw、 "keyup"には "input"イベントと同じ問題がありますが、なぜか分かりません) – Vital

+0

あなたのコードに何か他のものが必要です。ここでは、https://jsfiddle.net/5wdc0hrx/ 'keyup'や' change'を使って完全にうまく動作します。私はIEの互換性のために 'input'を使用することから遠ざかりますが、良くなっていると聞いてきました。 – TheValyreanGroup

+0

まあ、私にとっては少し謎です。 何が間違っているか分かりましたら、質問を更新します。 "change"イベントでは、 "onfocuslost"イベントや "blur"イベントは必要ありません。 "入力"イベントで - 私はそれが必要です。 IEについては...まあ...私はRIP IEを言うことができる瞬間を待つことができません。 :) ありがとうございました。 – Vital

関連する問題