2013-08-22 2 views
1

Я использую это в тот момент,Как генерировать вызов функции в JavaScript с фактическими параметрами

return '<img src="../images/fam/bug.gif"/ onclick="showDetails(event,\''+ 
     IPatient+'\',\''+ 
     nom +'\',\'' + 
     prenom+'\',\''+ 
     mesure_decision+'\',\''+ 
     type_mesure+'\')">'; 

и я уверен, что есть гораздо более удобный способ, чтобы написать это.

Любые предложения?

+0

Используйте некоторую библиотеку поддержки, такие как JQuery ... писать OnClick обработчики, как у вас на динамических тегов не очень элегантный ... –

+0

@AnttiHaapala вам не нужно JQuery для обработки [ (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener), вы также не можете [создавать элементы динамически] (https://developer.mozilla.org/en/Docs-американские/Web/API/document.createElement). – Broxzier

+0

Конечно, нет, но если вы не знаете, как это сделать без jquery, то использование jquery поможет немного. –

ответ

1

Поместите их в массив, а затем использовать .join()

var args = [IPatient,nom,prenom,mesure_decision,type_mesure]; 
return '<img src="../images/fam/bug.gif"/ onclick="showDetails(event,\''+args.join("','")+'\');">'; 

Хотя, как упоминалось Антти Haapala, вы действительно должны быть обязательные обработчики событий должным образом, а не с помощью on*="" атрибутов

Беглый возможно интегрированное решение:

var img = document.createElement('img'); 
img.src = '../images/fam/bug.gif'; 
var args = [IPatient,nom,prenom,mesure_decision,type_mesure]; 
if(img.addEventListener) img.addEventListener('click',function(e) { showDetails.apply([e].concat(args)); }); 
if(img.attachEvent) img.attachEvent('onclick',function(e) { showDetails.apply([e].concat(args)); }); 
return img; 
3

Как насчет:

var img = document.createElement('img'); 
img.setAttribute('src', '../images/fam/bug.gif'); 
img.addEventListener('click', function (e) { 
    showDetails(event, 'IPatient', 'nom', 'prenom', 'mesure_decision', 'type_mesure'); 
}); 
return img; 
+0

«IPatient», «nom», «prenom», «mesure_decision», «type_mesure» являются переменными, а не постоянными –

1

всегда лучше создавать обработчики событий против встроенного, поскольку у вас есть намного больше контроля над ним.

var img = document.createElement('img'); 
img.myInfo=[IPatient,nom,prenom,mesure_decision,type_mesure]; 
img.src='../images/fam/bug.gif'; 
img.addEventListener('click',showDetails,false); 
return img; 

внутри функции ShowDetails

function showDetails(e){ 
console.log(this.myInfo,e,e.target) 
var i=this.myInfo; 
console.log(i[0],i[1],i[2],'....'); 
//if you want aslo more control here use {'IPa':IPatient,'nom':nom.....} 
// so that you can write i.IPa, i.nom..... 
} 

в этом случае вы можете использовать removeEventListener, если вы удалите изображение позже но больше всего это проще изменить существующий код позже.

function deleteImage(e){ 
delete this.myInfo 
this.removeEventListener('click',showDetails,false) 
//.... 
} 

все в javacript - это объект, поэтому вы можете просто добавить параметры. и в этом случае это очень полезно.

т.е.

img[img.addEventListener?'addEventListener':'attachEvent']('click',showDetails); 
img[img.removeEventListener?'removeEventListener':'detachEvent']('click',showDetails); 

function showDetails(e){ 
e=e||window.event; 
console.log(this.myInfo,e,e.target||e.srcElement); 
} 
Смежные вопросы