J'essaie de lier une fonction à l'attribut "onclick" de l'ancre. Je n'utilise pas le traditionnel bind/live/on/whatever de jQuery parce que j'ai d'autres scripts qui arrêtent la propagation des événements (ça craint, je sais).
Pour lier la fonction à l'attribut "onclick", je passe un objet JSON à un module comme ceci :
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);
});
Comme vous pouvez le voir, la fonction nommée "foo" est transmise via la propriété "onClick" du JSON. La fonction est définie au-dessus de l'objet.
Dans "myModule", je crée la balise d'ancrage comme suit :
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();
};
Le problème est que, comme vous pouvez vous y attendre, "foo" est exécuté lorsque le script est analysé et uniquement à ce moment-là. Le "onclick" ne fonctionne même pas après.
Je peux le passer comme suit onClick: 'foo()'
. L'onclick fonctionne mais il est aussi exécuté lors de l'analyse et c'est, à mon avis, très laid.
J'aimerais pouvoir le faire passer comme suit onClick: foo
mais fonctionne correctement (c'est-à-dire qu'il n'est pas exécuté au chargement mais seulement au clic).
Il doit malheureusement fonctionner avec jQuery 1.4.4.