jqueryイベントを起動して要素pまたはspanをテキストフィールドに置き換え、onblurイベントをpまたはspanフィールドに置き換えているときに小さな問題に直面しています。
デモはこちら http://jsfiddle.net/yXcZG/
p テキストをクリックすると、最初はうまくいきますが、同じプロセスを 2 回目に繰り返すと失敗します。
問題がどこにあるのか、誰でも助けてくれますか
jqueryイベントを起動して要素pまたはspanをテキストフィールドに置き換え、onblurイベントをpまたはspanフィールドに置き換えているときに小さな問題に直面しています。
デモはこちら http://jsfiddle.net/yXcZG/
p テキストをクリックすると、最初はうまくいきますが、同じプロセスを 2 回目に繰り返すと失敗します。
問題がどこにあるのか、誰でも助けてくれますか
jQueries .on selecorは、動的コンテンツ(ajaxや実行していることなど)にアタッチするために使用されます。通常は使用するだけですが$('.myClass').click(funcction(){});
、静的クラスを使用する$('.cmtedit').on(...
と、そのクラスをクリックして削除されるため、問題が発生します。作成した参照には存在しなくなります。したがって、.on
適切に使用するにはdocument
、動的コンテンツにいつでも再接続できるように、接続する必要があります。:-)
.on(events [、selector] [、data]、handler(eventObject))
$(document).on('click', '.cmtedit', function (e) {
console.log(this);
TBox(this);
});
ここでうまく機能します。
console.log();
ChromeまたはFirefoxを使用していない場合も、削除することを忘れないでください。IEではまったくサポートされていません!
RBox()関数で作成された新しい<p>にクリックイベントをアタッチしていません。次のコードが機能します:(ここにあるかどうかをテストします:http://jsfiddle.net/yXcZG/5/)
$(".cmtedit").on('click', function (e) {
TBox(this);
});
$("input").live('blur', function (e) {
RBox(this);
});
function TBox(obj) {
var id = $(obj).attr("id");
var tid = id.replace("cmt_edit_", "cmt_tedit_");
var input = $('<input />', { 'type': 'text', 'name': 'n' + tid, 'id': tid, 'class': 'text_box', 'value': $(obj).html() });
$(obj).parent().append(input);
$(obj).remove();
input.focus();
}
function RBox(obj) {
var id = $(obj).attr("id");
var tid = id.replace("cmt_tedit_", "cmt_edit_");
var input = $('<p />', { 'id': tid, 'class': 'cmtedit', 'html': $(obj).val() });
$(obj).parent().append(input);
$(obj).remove();
$(".cmtedit").on('click', function (e) {
TBox(this);
});
}
もし私があなただったら、それをリファクタリングし(ライブは高価です)、次のように書きます:
<style>
#cmt_edit_323 input { display: none; }
</style>
<div id="sample">
<p id="cmt_edit_323" class="cmtedit"><span>Sample Text</span><input type="text"></input> </p>
</div>
<script>
$(".cmtedit").on('click', function (e) {
TBox(this);
});
$(".cmtedit input").on('blur', function (e) {
RBox(this);
});
function TBox(obj) {
var input = $(obj).find("input");
var span = $(obj).find("span");
input.attr('value', span.text()).show().focus();
span.hide();
}
function RBox(obj) {
var input = $(obj);
var span = $(obj).parent().find("span");
span.html(input.attr('value')).show();
input.hide();
}
</script>
ここで確認してください:JSFiddle
あなたがそうしてobjを削除していると思います
$(obj).remove();
TBox
関数で
したがって、RBox
関数を再度作成するときに、クリックイベントハンドラーを追加する必要があります
またはさらに良い
使用することをお勧めします
$(".cmtedit").live('click', function (e) {
それ以外の
$(".cmtedit").on('click', function (e) {