根据搜索结果执行不同的操作

时间:2012-04-16 08:02:25

标签: php jquery ajax json

我有一个包含大量输入(文本输入,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);
});

1 个答案:

答案 0 :(得分: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"}
    }
]

仅使用函数名而不是();用他们的名字。