1

我有一个基本的 html/php 表单,带有 jquery 验证。我希望用户能够单击显示“预览”的链接,加载fancybox,然后我将呈现数据的预览,这意味着组合元素。例如,用户可以选择 iframe 的背景。这是我的表格的基础知识-

    <form action="loggedin.php"  enctype="multipart/form-data" id="message_form" method="post">
    <h4>Who would you like to send a message to?</h4>
    <input type="text" size="35" id="recipient" name="recipient" value="Enter Name">
    <h4>Choose A Background: </h4>
    <input type="radio" value="plain" class="stationery_radio" name="stationery_radio" checked />
    <label for="plain">Plain</label>
     .....  

这是我想要在我的幻想箱中的信息:

    <a class="fancybox" href="#preview_message">Click Here To Preview Your Form</a>
    <div id="preview_message" style="display:none;">
    <h2>To: <?php echo ($message_form['recipient']) ?></h2>
    .....

但我不能使用 POST,因为我还没有真正提交表单。如何将数据发送到用户可以查看的fancybox,然后提交表单或返回编辑?谢谢你的帮助。

4

2 回答 2

3

我要做的是创建另一个 .php 文件(例如preview.php),您可以在其中(预先)通过 ajax 提交表单。该文件基本上将包含您的表单字段echo的值,例如等。POST$_POST['recipient']

此外,在同一个文件(preview.php)中,您可能有一些链接可以提交实际表单或关闭fancybox。

这是 preview.php 文件的示例

<?php 
function check_input($data){
   // sanitize your inputs here
}
$field_01 = check_input($_POST['field_01']);
$field_02 = check_input($_POST['field_02']);
$field_03 = check_input($_POST['field_03']);
// ... etc
?>
<div style="width: 340px;">
  <h3>This is the preview of the form</h3><br />
  <p>Field 01 : <?php echo $field_01;?></p>
  <p>Field 02 : <?php echo $field_02;?></p>
  <p>Field 03 : <?php echo $field_03;?></p>
  <a class="submit" href="javascript:;">submit</a>
  <a class="closeFB" href="javascript:;">back to edit</a>
</div>

请注意 style="width: 340px;",fancybox 会知道要显示的框的大小(height将是auto

然后在您的主页中,添加预览按钮

<a class="preview" data-fancybox-type="ajax" href="preview.php">Preview</a>

注意data-fancybox-type="ajax"属性,它告诉fancybox 的内容type

然后脚本通过 ajax 提交(预览)表单:

jQuery(document).ready(function ($) {
  $('.preview').on("click", function (e) {
    e.preventDefault(); 
    $.ajax({
      type: "POST",
      cache: false,
      url: this.href, // our preview file (preview.php)
      data: $("#message_form").serializeArray(), // all the fields in your form (use the form's ID)
      success: function (data) {
        // show in fancybox the returned data
        $.fancybox(data,{
          modal : true, // optional (no close button, etc. see docs.)
          afterShow: function(){
            // bind click to "submit" and "close" buttons inside preview.php
            $(".submit, .closeFB").on("click", function(event){
              if( $(event.target).is(".submit") ){
                $("#message_form").submit(); // submit the actual form
              }
              $.fancybox.close(); //close fancybox in any case
            }); // on click
          } // afterShow
        }); // fancybox
      } // success
    }); // ajax
  }); // on click
}); // ready

当然,http: //www.picssel.com/playground/jquery/postPreview_05Jun13.html 上的 DEMO 。

注意事项

  • 这是为fancybox v2.1.4+
  • .on()需要 jQuery v1.7+
于 2013-06-06T07:27:00.127 回答
0

您可以使用 Jquery 来获取值,然后将它们放入花哨的盒子中......

有点像这样……不完全是,但你明白了……

 $('#preview_button').click(function(){

var msg = $('#recipient').val();
var bg = $('input:radio[name=stationary_radio]:checked').val();

$('h2#recipient').html(msg);
//and whatever you wanna do with the value of the bg
//probably apply some CSS on the fly to change the preview background?
$('#fancybox').show();

});

fancybox show() 可能是错误的,从未使用过 fancybox,所以我不知道,但我只是使用通用的“隐藏 div”节目。我假设fancybox有自己不同的API,所以只需替换......

于 2013-06-06T02:12:38.853 回答