【问题标题】:Sumbit form with two buttons and ajax使用两个按钮和 ajax 提交表单
【发布时间】:2020-05-13 17:09:19
【问题描述】:

我有一个用 ajax 制作的表单,在这个表单中有 2 个提交,两者都具有与发送电子邮件相同的功能,但取决于用户是否使用其中一个或另一个电子邮件必须表明此选择。

我尝试使用 isset 函数查看要提交两个按钮中的哪一个,但是当我收到此参数时,它是空的。

HTML 表单

<form id="form-landing" data-ajax="<?php echo admin_url('admin-ajax.php?action=contactlanding'); ?>">

    <?php while (have_posts()) : the_post();
        the_content();
    endwhile; ?>
    <?php wp_nonce_field(); ?>

    <div id="step1">
        <div class="group-form">
            <p>1.- question 1</p>
            <div>
                <label for="afrontarsi">Yes</label><input type="radio" name="afrontar" value="Si" id="afrontarsi">
                <label for="afrontarno">No</label><input type="radio" name="afrontar" value="No" id="afrontarno">
            </div>

        </div>

        <div class="group-form">
            <p>2. - Question 2</p>
            <div>
                <input type="text" name="importe" id="importe"> €
            </div>
        </div>


        <button class="send-button" name="1button" href="">Yes</button>
        <button class="send-button" name="2button" href="">No</button>


</form>

jQuery

if(is_page_template('template-landing.php')): ?>
$('#form-landing').submit(function(e){

  e.preventDefault();
    var form = $(this).addClass('loading');
    var alert = form.find('.alert').removeClass('alert-danger alert-success').html('');
        $.ajax({
        url:form.data('ajax'),
        type:'POST',
        data:new FormData(this),
        processData:false,
        contentType:false,
    }).done(function(data){
        form[0].reset();
        form.find('.btn').prop('disabled',true);
        alert.addClass('alert-success').html(data);
    }).fail(function(error){
        alert.addClass('alert-danger').html(error.responseText);

    }).always(function(){
        form.removeClass('loading');

  });
});
<?php endif;
?>

PHP函数

function contactlanding(){

    if(check_ajax_referer()){

        $afrontar = sanitize_text_field($_POST['afrontar']);
        $importe = sanitize_text_field($_POST['importe']);
        if (isset($_POST['1button'])) {$button="First";} else{$button="Second";}        


        $web = parse_url(home_url(),PHP_URL_HOST);
        $message = '<p><strong>Afrontar:</strong> '.$afrontar.'</p>';
        $message .= '<p><strong>Importe:</strong> '.$importe.'</p>';
        $message .= '<p><strong>Button:</strong> '.$button.'</p>';


        $headers  = 'MIME-Version:1.0'."\r\n";
        $headers .= 'Content-type:text/html;charset=utf-8'."\r\n";
        $headers .= 'From:noreplay@'.$web."\r\n";
        $headers .= 'Reply-To:'.$email."\r\n";
        $send = mail(get_bloginfo('admin_email'),'Mensaje enviado desde '.$web,$message,$headers);
        if($send==true){
            echo 'Gracias, tu mensaje se ha enviado correctamente.';exit;
        }
    }
    http_response_code(400);echo 'Algo salió mal, por favor intenta más tarde.';exit;
}

【问题讨论】:

    标签: php jquery ajax forms isset


    【解决方案1】:

    您可以将操作存储在隐藏的输入中。 您的服务器将接收数据,您将能够读取它。接下来,一个很简单的方法来给大家指路:

    $('.send-button').on('click', function (){  $(this).closest('form').find('[name="action"]').val($(this).data('submit')) 
    })
    
    $('form').on('submit', function(evt) {
      // form content :
      console.log($(this).serialize());
      // prevent form submission for the demo
      evt.preventDefault();
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <form>
      <input type="text" name="firstname" value="Johon" /> 
      <input type="hidden" name="action" value="" /> 
      <button class="send-button" name="1button" href="" data-submit="yes">Yes</button>
      <button class="send-button" name="2button" href="" data-submit="no">No</button>
    </form>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2013-03-20
      相关资源
      最近更新 更多