Как использовать jquery validate для удаленной проверки, чтобы установить и вернуть значения полей формы на страницу действия формы? - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть форма, которая проверяет с помощью плагина jQuery: Validation, v1.9.0. Проверка также выполняет удаленные вызовы серверного сценария (Coldfusion) для проверки имен пользователей, адресов электронной почты и т. Д.

Моя проблема заключается в следующем:

В процессе удаленной проверки, бывают моменты, когда новые поля формы будут определены и установлены через серверный скрипт, который необходимо вернуть в форму вызова, чтобы их можно было передать на страницу действия формы.

Как вы заметите в моих фрагментах кода ниже, мне приходится проходить эти значения полей формы на каждом этапе процесса (т. Е. Создавать структуру результата, выбирать их в обработчике успеха и т. Д.), Который и утомительно, и подвержено ошибкам, так как форма может измениться в будущем.

Есть ли способ, который я могу использовать, который просто позволит мне "глобально" установить эти значения полей формы, через которые моя вызывающая форма / страница действия может получить после проверки формы?

СНИПЕТТ ВАЛИДАЦИИ JQUERY:

validator = $('#cartDownload_form').validate({

  submitHandler: function(form) {

  // make submit button disabled
  $('#submit_button').attr('disabled', 'disabled');

  // show modal dialog about submittal process..
  var processing_dialog = ShowDialog("Processing Order...", "<p>Please wait while we process your order...</p>", false);

  // prepare Options Object 
  var options = { 
    url: "/products/val_cartDownload_remote.cfm", 
    dataType: 'json',
    type: "POST",
    success: function(data) { 

      if(data.ERRORMESSAGELIST.length == 0) {
        // no errors...

        // set return form field values needed for action page
        $('#verified').val(data.VERIFIED);
        $('#dlurl').val(data.DLURL);
        $('#dllocation').val(data.DLLOCATION);
        $('#itemname').val(data.ITEMNAME);
        $('#itemtease').val(data.ITEMTEASE);
        $('#itemimage').val(data.ITEMIMAGE);
        $('#itemimage_border').val(data.ITEMIMAGE_BORDER);
        $('#itemimage_alt').val(data.ITEMIMAGE_ALT);
        $('#itemimage_title').val(data.ITEMIMAGE_TITLE);
        $('#itemthumb').val(data.ITEMTHUMB);
        $('#itemthumb_border').val(data.ITEMTHUMB_BORDER);
        $('#itemthumb_alt').val(data.ITEMTHUMB_ALT);
        $('#itemthumb_title').val(data.ITEMTHUMB_TITLE);
        $('#itempubnotes').val(data.ITEMPUBNOTES);
        $('#itemurl_size').val(data.ITEMURL_SIZE);  
        $('#first_name').val(data.FIRST_NAME);  

        // submit the form
        $('#cartDownload_form')[0].submit();  

        return true;

      } else {
        // an error occurred...

  }; 

  $(form).ajaxSubmit(options);

  return false;
}

ПУЛЬТ ДИСТАНЦИОННОЙ ВАЛИДАЦИИ (это новые поля формы и значения, не входящие в форму вызова):

    <cfset variables.result_struct = {
  errorfieldlist = listtoarray(form.errorfieldlist),
  errormessagelist = listtoarray(form.errormessagelist, form.RS),
  verified = form.verified,
  dlurl = form.dlurl,
  dllocation = form.dllocation,
  itemname = form.itemname,
  itemtease = form.itemtease,
  itemimage = form.itemimage,
  itemimage_border = form.itemimage_border,
  itemimage_alt = form.itemimage_alt,
  itemimage_title = form.itemimage_title,
  itemthumb = form.itemthumb,
  itemthumb_border = form.itemthumb_border,
  itemthumb_alt = form.itemthumb_alt,
  itemthumb_title = form.itemthumb_title,
  itempubnotes = form.itempubnotes,
  itemurl_size = form.itemurl_size,
  first_name = form.first_name
}>

<cfoutput>#serializeJSON(result_struct)#</cfoutput>

Так что я пытаюсь уйти от необходимости установить все эти значения полей формы вручную в нескольких местах, чтобы просто вернуть их на мою страницу вызова / страницу действий.

Я, вероятно, совершаю простую ошибку новичка и, похоже, не могу найти ответ.

Спасибо.

1 Ответ

0 голосов
/ 23 декабря 2011

Для упрощения вашего jQuery:

if(data.ERRORMESSAGELIST.length == 0) {
// no errors...
// set return form field values needed for action page
    for (field in data)        {
      $('#' + field.toLowerCase()).val(data[field]);
    }

    // submit the form
    $('#cartDownload_form')[0].submit();  

И ваш код cf:

  <cfset variables.result_struct = {
    errorfieldlist = listtoarray(form.errorfieldlist),
    errormessagelist = listtoarray(form.errormessagelist, form.RS)
  }>
  <cfset StructAppend(variables.result_struct, form)>

<cfoutput>#serializeJSON(result_struct)#</cfoutput>
...