関数をアンカー「onclick」属性にバインドしようとしています。イベントの伝播を停止する他のスクリプトがあるため、従来のjQueryのbind/live/on/whateverは使用していません(それはひどいです)。
関数を「onclick」属性にバインドするには、次のように JSON オブジェクトをモジュールに渡します。
function foo() {
alert('foo')
}
$('document').ready(function() {
var options = {
opt1: 'fooID',
opt2: 'barID',
json: mightyJSON,
actions: [
{ url: 'contact/_id_/edit', text: "Edit", iconPath: 'edit.png' },
{ url: '#', onClick: foo, text: "Delete", iconPath: 'delete.png' }
]
};
var trolol = myModule.configure(options);
});
ご覧のとおり、「foo」という名前の関数は、JSON の「onClick」プロパティを介して渡されます。関数はオブジェクトの上で定義されます。
「myModule」では、次のようなアンカー タグを作成しています。
var buildLinks = function(objectID)
{
var linksNbr = actions.length;
var link, cssClass;
for (var i = 0; i < linksNbr; i++)
{
// Adding the object ID to the URL
link = actions[i].url.replace('_id_', objectID);
cssClass = actions[i].cssClass || '';
var $link = $(document.createElement('a')).attr('onClick', actions[i].onClick)
.attr('href', link)
.attr('title', actions[i].text)
.addClass(cssClass)
.text('foo');
}
return $link.html();
};
問題は、スクリプトが解析されたときに「foo」が実行され、そこでのみ実行されることを期待できることです。「onclick」はその後も機能しません。
私はこのようにそれを渡すことができますonClick: 'foo()'
。onclick は機能しますが、解析時にも実行され、私の意見では非常に醜いです。
このように渡すことができるようにしたいのですがonClick: foo
、正しく動作します(つまり、ロード時に実行されず、クリックしたときにのみ実行されます.
残念ながら、jQuery 1.4.4 で動作する必要があります。