0

私が作成しているデータ ツールには、 と の 2 つの関数がshowEditDv(object)ありeditDv(object)ます。まだ推測していない場合Dvは、Data Value の略です。showEditDvデータの編集アイコンをクリックすると呼び出されます。データを編集できるようにするOpentipツールチップを生成showEditDv(this);し、onclick 属性で次のように呼び出します。その関数のコードは次のとおりです (いいえ、実際にはインライン コメントはありません)。

function showEditDv(object) {
    var name = $(object).attr("data-name"); // string(name) now holds the name of the data value
    var input = new Opentip($(object), {target: null, showOn: null, hideTrigger: "closeButton"});
    input.setContent("<label>Name:</label><input type='text' value='" + name + "' class='dv-add-name' /><label>Value:</label>input type='text' class='dv-add-value' value='" + data[name] + "' /><button onclick='editDv(" + $(object) /*<-- problem */ + ");'>Apply</button>");
    input.show();
}

editDv()関数が「適用」ボタンによって呼び出されると、問題が発生します。オブジェクトは文字列で参照されているため (私が思うに!)、オブジェクト参照は として出力され、参照[object Object]がないため、関数は Opentip を非表示にできません。のコードは次のeditDv()とおりです。

function editDv(object) {
    var input = $(object).data("opentips")[0]; // data("opentips") is an array of objects
    input.hide();
}

だから私の質問は次のとおりです。inputオブジェクトをshowEditDv引数editDvとして渡すにはどうすればよいですか、またはこれを完全に行うためのより良い方法はありますか?

4

1 に答える 1

2

onclick イベントで関数をインラインで呼び出さないでください。代わりに jQuerys .on() 関数を使用してください。

そのようです:

function showEditDv(object) {
    var name = $(object).data("name"); // use .data()
    var input = new Opentip($(object), {target: null, showOn: null, hideTrigger: "closeButton"});
    input.setContent("<label>Name:</label><input type='text' value='" + name + "' class='dv-add-name' /><label>Value:</label>input type='text' class='dv-add-value' value='" + data[name] + "' /><button class='callEditDv'>Apply</button>");
    input.show();
}

$('.callEditDv').on('click', function() {
    // access the button like this: $(this)
});
于 2013-04-02T20:17:39.987 に答える