クエリ文字列パラメーターを読み取って、jQuery を使用して動的コントロールを作成しています。これらのコントロールをドラッグしてきちんと配置できます。ドラッグ/ドロップのドロップ イベントの後、非表示フィールドを介してコントロールの位置と状態を更新します。私の実装がドロップごとにデータを更新するようになっただけですが、これは良くありません。私もイベントを通じてこれを行いましたが、うまくいきませんでした
現在の実装
/*Create controls when only query string exists*/
if (config.params) {
//parse the query string json as a object
//ex:{type:"textbox",x:100,y:200,label:Name}
var params = $.parseJSON(config.params);
//for each control in json add it to document body
$(params).each(function (idx, obj) {
var id = new Date();//for generating dynamic id
id = id.getTime();
$("<span>").addClass(obj.css).load(function (ev) {
var a = this;
$(a).data("keys", {
key: $("label", a).text()**certainly label wont be found**,
value: $("input[name]:hidden", a)
});
}).
easydrag().ondrop(function (e, el) {
//easydrag drag drop plugin
var a = $(el),
b = a.data("keys"),
key = b.key,
value = b.value;
value.val(key + "$" + e.pageX + "$" + e.pageY);
}).
css({
position: "absolute",
top: obj.y,
left: obj.x
}).
append($("<label>", {
"for": id
}).
html(obj.label).
append(config.ELEMENTS(obj.type).attr("id", id))).
append($("<input>", {
"type": "hidden",
"name": "CONTROL$POSITION",
"id": "control_position_" + idx
})).
appendTo("form");
});
}
質問
- ご覧のとおり、ロード時にスパン要素にデータをアタッチします。しかし、それはロードイベントなので、インナー
label
とhidden fields
. 要素にデータを設定する必要があるのはspan
一度だけです。これは、その間drop event
にラベルと隠しフィールドにアクセスしてコントロールの現在の位置を更新するためです。私は各ドロップをしたくありません。それが私の目的です。query the dom
label
hidden field
- また、ポストバック後にコントロールを再描画する方法についてのアイデアを教えてください。