0

ユーザーが独自のプリセットを入力できる多くの入力(テキスト入力、テキストエリア、チェックボックスなど)を含むフォームがあります。現時点では、ユーザーは自分のプリセットを検索でき、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);
});
4

1 に答える 1

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"}
    }
]

()ではなく関数名のみを使用してください。彼らの名前で。

于 2012-04-16T08:09:03.787 に答える