【问题标题】:Submit form (jquery) and show results in colorbox提交表单(jquery)并在颜色框中显示结果
【发布时间】:2011-12-05 22:25:54
【问题描述】:

我有一个要提交的表单,它正在发布到一个 php 脚本来处理表单数据。

我需要做的是在点击提交后弹出一个带有 php 结果的颜色框。

这个可以吗?

这是我一直在尝试的:

$("#buildForm").click(function () { // #buildForm is button ID
    var data = $('#test-buildForm'); // #test-buildForm is form ID

    $("#buildForm").colorbox({
        href:"build_action.php", 
        iframe:true, 
        innerWidth:640, 
        innerHeight:360,
        data: data
    });
    return false;
     });

更新:这需要在 iframe 中作为 build_action.php 为这些结果包含了特定的 css 和 js。

【问题讨论】:

  • 当然可以。你被困在哪里了?你能提供一些代码吗?
  • 请您解释一下颜色框是什么,就像在对话框中一样?
  • @Coulton 是一个流行的灯箱 jQuery 插件克隆

标签: php jquery html forms colorbox


【解决方案1】:

这就是我最终让它工作的方式:

<div id="formwrapper">
  <form method="post" action="http://wherever" target="response">
    # form stuff
  </form>

  <iframe id="response" name="response" style="display: none;"></iframe>
</div>

<script>
function hideresponseiframe() {
  $('#formwrapper #response').hide();
}

$('form').submit(
  function (event) {
    $('#formwrapper #response').show();
    $.colorbox(
      {
        inline: true,
        href: "#response",
        open: true,
        onComplete: function() {
          hideresponseiframe()
        },
        onClosed: function() {
          hideresponseiframe()
        }
      }
    );
    return true;
  }
);

</script>

【讨论】:

    【解决方案2】:

    您需要查看使用颜色框 jQuery 插件的确切方法。但这是我刚刚编写的一个基本(未经测试)代码示例,希望能帮助您。

    如果您希望使用 jQuery 提交表单,假设您有以下表单和 div 来保存对话框数据:

    <form id="myForm">
    <input type="text" name="num1" />
    <input type="text" name="num2" />
    <input type="submit" name="formSubmit" />
    </form>
    <div style="display: hidden" id="dialogData"></div>
    

    您可以有一个 PHP 代码 (doAddition.php),它可以将两个数字相加

    <?php
    // Do the addition
    $addition = $_POST['num1'] + $_POST['num2'];
    
    $result = array("result" => $addition);
    
    // Output as json
    echo json_encode($result);
    ?>
    

    您可以使用 jQuery 检测代码的提交,然后将数据发送到 PHP 页面并以 JSON 形式返回结果:

    $('form#myForm').submit( function() {
    
        // Form has been submitted, send data from form and get result
    
        // Get data from form
        var formData = $('form#myForm').serialize();
    
        $.getJSON( 'doAddition.php', formData, function(resultJSON) {
    
              // Put the result inside the dialog case
              $("#dialogData").html(resultJSON.result);
    
              // Show the dialog
              $("#dialogData").dialog();
    
        });
    });
    

    【讨论】:

    • 这需要在 iframe 中返回,因为 script.php 为这些结果包含特定的 css 和 js。
    • 你不能让两个页面都访问 javascript 和 CSS 吗?
    【解决方案3】:

    这是一个简单的、未经测试的代码,但它会给你一个很好的起点,所以你可以随心所欲地详细说明:

    <form action="/path/to/script.php" id="formID" method="post">
      <!-- form stuff goes here -->
      <input type="submit" name="do" value="Submit" />
    </form> 
    
    <script type="text/javascript">
    $(function() { 
        $("#formID").submit(function() {
            $.post($(this).attr("action"), $(this).serialize(), function(data) {
                $.colorbox({html:data});
            },
            'html');
            return false;
        });
    });
    </script>
    

    【讨论】:

    • 我可以将它放在 iframe 中吗?
    • 另外.. php 方面现在已经序列化了。
    • 您需要编写一些 PHP 代码来处理表单提交并打印出您希望在颜色框中显示的结果 HTML。在我的示例中,这将发生在“/path/to/script.php”
    • 谢谢...把它放在 iframe 中怎么样?它发布到的脚本独立于表单页面。
    • 什么意思?使用 iframe 而不是使用颜色框?或者在颜色框内使用 iframe 而不是 html:data 选项?此外,“它发布到的脚本独立于表单页面。”
    【解决方案4】:

    本文将帮助您解决问题

    http://www.php4every1.com/tutorials/jquery-ajax-tutorial/

    $(document).ready(function(){
    $('#submit').click(function() {
    
        $('#waiting').show(500);
        $('#demoForm').hide(0);
        $('#message').hide(0);
    
        $.ajax({
            type : 'POST',
            url : 'post.php',
            dataType : 'json',
            data: {
                email : $('#email').val()
            },
            success : function(data){
                $('#waiting').hide(500);
                $('#message').removeClass().addClass((data.error === true) ? 'error' : 'success')
                    .text(data.msg).show(500);
                if (data.error === true)
                    $('#demoForm').show(500);
            },
            error : function(XMLHttpRequest, textStatus, errorThrown) {
                $('#waiting').hide(500);
                $('#message').removeClass().addClass('error')
                    .text('There was an error.').show(500);
                $('#demoForm').show(500);
                }
            });
    
            return false;
        });
    });
    
    
    
    < ?php
    sleep(3);
    
    if (empty($_POST['email'])) {
        $return['error'] = true;
        $return['msg'] = 'You did not enter you email.';
    }
    else {
        $return['error'] = false;
        $return['msg'] = 'You\'ve entered: ' . $_POST['email'] . '.';
    }
    
    echo json_encode($return);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多