jQueryのイベントハンドラとしてJavaScript関数を使用しようとしていますが、追加の情報が1つ必要です。データを持つオブジェクトに追加しようとしましたが、this
を使用しましたが、this
は実行時にnullです。私はこれがJavaScriptでの関数のコピーと関係していると思います。どのように私は余分な情報を渡すことができます。サイズ変更が試行されるとJavaScriptのイベントに追加の引数を渡す
<script type="text/javascript">
var WIDTH_ATTR = 'initWidth';
function resizeHandler(event, ui){
var change = ui.size.width - this.master.attr(WIDTH_ATTR);
this.slave.width(slave.attr(WIDTH_ATTR) - change);
};
function splitResize(master, slave, masterHandles){
var s = new SharedResize(master, slave);
master.resizable({ handles: masterHandles, resize: s.resizeHandler });
}
function SharedResize(master, slave){
this.master = master;
this.slave = slave;
this.resizeHandler = resizeHandler;
master.attr(WIDTH_ATTR, master.width());
slave.attr(WIDTH_ATTR, slave.width());
}
// initialise plugins
$(function(){
try {
$('ul.sf-menu').superfish();
splitResize($('#Content'), $('#InfoPanel'));
}catch(ex){
alert(ex.message);
}
});
</script>
このコードは
Line:13 'this.master' is null or not an object.
のエラーが発生します。
このスキームを機能させるか、イベントハンドラを自分のデータに関連付ける別の方法がありますか。
感謝を!私はあなたの閉鎖を微調整しなければならなかったが、それは私を十分に閉じ込めた。私は自分の変更を反映するためにあなたの答えを更新しました。 –
オハイオ州オクラホマ良い - 私はあなたが "余分なパラメータ"の意味を正確には分かっていませんでした:-) – Pointy
私の当初の目標は、 'master'と' slave'をresizeハンドラに直接渡すことでした。私はクロージャーを使って、どうやってそれをやることができるかを見ていますが、オブジェクトのバージョンはすでに書かれています。 –