2012-04-16 48 views
0

我有一个包含大量输入(文本输入,textareas,复选框等)的表单,用户可以使用它们自己的预设填充。目前,用户可以搜索他们的预设,一个ajax查询被调用,并且我用一个找到的预设列表返回HTML。 HTML(详细地说)是在一个PHP文件中生成的,该文件添加了许多不同动作的onclick=""。用户可以单击预设并填写表单。根据搜索结果执行不同的操作

生成的HTML(也被放在网页)的一个例子可能是

<a onclick=" $('#AgendaItemName').val('Preset 1'); $('#AgendaItemOpmerking').val(''); $('#AgendaItemLokaalID').val(''); $('#AgendaItemPlaats').val(''); $('#AgendaItemBegeleidendeLeerkrachten').val(''); $('#AgendaItemDoelgroep').val(''); $('#AgendaItemIsPubliek').val('1'); $('#AgendaItemLesFicheAbonnementID').val(''); $('#AgendaItemAgendaItemTypeID').val('2'); $('#AgendaItemAgendaItemPublicatieTypeID').val(''); $('#AgendaItemLeergebiedID').val('1'); $('#AgendaItemLeerdomeinID').val('1'); $('#AgendaItemLessenTaken').val(''); $('#AgendaItemVerloop').val('Test verloop\r\n\r\ntest opslaan vanuit agendaitem'); $('#AgendaItemBeginsituatie').val(''); $('#AgendaItemMateriaal').val(''); $('#AgendaItemEvaluatie').val('Test evaluatie'); $('#AgendaItemEigenLesdoelen').val('Test lesdoelen'); $('#AgendaItemAgendaItemHerhaalModeID').val(''); $('#AgendaItemHerhaalStartDatum').val(''); $('#AgendaItemHerhaalEindDatum').val(''); $('#AgendaItemAgendaItemKleuterModeID').val('0'); UpdateVisibleFields('AgendaItem');$('.HoekVeldInput').val('');$('#AgendaItemAgendaItemBelangstellingsCentrumID').val(''); $('#AgendaItemLesFicheID').val('791'); $('#AgendaItemIsBestaandeFicheAanpassen').attr('disabled', false); loadFieldsets(791, 'LesficheID'); return false; " href="#">Preset 1</a> 

你实际上并没有完全阅读这段代码,因为真的是......嗯,不是那么好。大部分时间只是设置值,但有时候,我还需要执行一些功能,具体取决于预设的设置。现在我正在考虑更好的方法来解决这个问题,但我被卡住了。有没有办法将这些动作与JSON一起发送?是否有可能做这样的事情

var returndatafromajax = [ 
    { 
     "html" : "<a href='#' rel="0">preset</a>", 
     "actions" : "dothis(); dothat();" 
    }, 
    { 
     "html" : "<a href='#' rel="1">preset 2</a>", 
     "actions" : "someofthis();" 
    }, 
    { 
     "html" : "<a href='#' rel="2">preset 3</a>", 
     "actions" : "noneofthat();" 
    } 
] 

$('ul').on('click', 'a', function() { 
    var index = $(this).attr('rel'); 
    somehowexecute(returndatafromajax[index].actions); 
}); 
+0

n简而言之,是的,你可以做到这一点。 如果你有一串你想执行的代码,你可以使用'eval()'https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/eval。 – Yaniro 2012-04-16 08:15:00

回答

1

是的,你可以通过这种方式做到这一点

var returndatafromajax = [ 
    { 
     "html" : "<a href='#' rel="0">preset</a>", 
     "actions" : {"1":"dothis","2":"dothat"} 
    }, 
    { 
     "html" : "<a href='#' rel="1">preset 2</a>", 
     "actions" : {"1":"someofthis"} 
    }, 
    { 
     "html" : "<a href='#' rel="2">preset 3</a>", 
     "actions" : {"1":"noneofthat"} 
    } 
] 

只使用函数名不是();与他们的名字。

+0

而我将如何执行那些功能?很多函数也需要参数(比如'$('#field').val('test');')我该怎么做? – Bram 2012-04-16 08:18:06

+0

如果函数需要参数,则必须在json中指定它们并通过在调用中指定它们来调用它们 – 2012-04-16 08:21:59

相关问题