如何停止模式对话框中的重复条目

Posted

技术标签:

【中文标题】如何停止模式对话框中的重复条目【英文标题】:How do i stop duplicate entrys on a modal dialog 【发布时间】:2016-02-01 10:49:35 【问题描述】:

避免用户两次输入相同记录的最佳方法是什么。我的插件中有以下内容

jQuery(document).ready(function()

jQuery("#submit").click(function()
    var points = jQuery("#points]").val();
  jQuery.ajax(
      type: 'POST',
      url: MyAjax.ajaxurl,
      data: "action": "updateRedeemPoints", "points":points,
      success: function(data)
      alert(data);
    
    );
   );

我的函数只是发布到我想阻止它两次插入数据库,但它应该产生一个比 javascript 默认值更友好的消息框,或者是否可以使用引导通知。

wp_localize_script( 'gogreen', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php')));
        function updateRedeemPoints()

        $userId = get_current_user_id();        
        $mykey = 'player_id';
        $single = true;
        $playerId = get_user_meta( $userId, $mykey, $single ); 
        $points=$_POST['points'];
        global $wpdb;
        $wpdb->insert( 
            '4hSIc_pods_player_ranking', 
            array( 
                'points_to_redeem' =>$points,
                'player_id'=>$playerId,
                'date_to_be_awarded' => current_time('mysql', 1),
                'approved'=>'false'

            ));

        $headers  = "From: " . $form_data['name'] . " <" . $form_data['email'] . ">\n";
        $headers .= "Content-Type: text/plain; charset=UTF-8\n";
        $headers .= "Content-Transfer-Encoding: 8bit\n";

        wp_mail( 'davidbuckleyni.co.uk', 'test', 'test', $headers );

顺便说一句,如果它有所作为,我正在使用引导模型。

                echo "<div id='thanks' class='modal fade' tabindex='-1' role='dialog' aria-labelledby='myModalLabel' aria-hidden='true'>";
                echo "<div class='modal-dialog'>";
                echo "<div class='modal-content'>";
                echo "<div class='modal-header'>";
                echo "<button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button>";
                echo "<h4 class='modal-title'>Redeem Points</h4>";
                echo "</div>";
                    echo "<form class='form-horizontal'  class='contact' name='redemmpointsForm' id='redemmpointsForm' >";
                    echo " <div class='form-group'>";
                    echo "<h3>You may only redeem the maxium points of : <?php echo $maxpoints;?></h3>";
                    echo "<input type='hidden' name='playerid' value='<?php echo $playerId;;?>' />";
                    echo "<input type='number'  valuemax='<?php echo $maxpoints;?>' name='points' id='points' class='form-control' placeholder='How many points do you wish to redeem.' />";
                    echo "<label class='control-label col-md-4' for='Comments'>Comments?</label>";
                    echo "<input type='text' name='comments' />";

                    echo "     </div>";
                    echo "    <div class='form-group'>";
                    echo "            <div class='col-md-6'>";
                    echo "                <input type='button' class='btn btn-success' name='submit' id='submit' Text='Submit'>";
                    echo "     <a href='#' class='btn' data-dismiss='modal'>Close</a>";
                    echo "         </div>";
                    echo "      </div>";
                    echo "</form>";
                echo "      </div>";
                        echo "      </div>";
                            echo "      </div>";

【问题讨论】:

【参考方案1】:

您可以在 AJAX 请求之前禁用提交按钮,并在您收到来自服务器的成功响应时向用户显示一条消息。

由于您已经在使用引导程序,您可以使用引导程序警报来显示友好的成功消息。

例如,包含类似

的内容
<div class="alert alert-success alert-dismissible" id="points-success" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  <strong>Success!</strong> Great! Your points have been redeemed.
</div>

在您的表单中,默认隐藏在 css 中,并在 Ajax 成功回调中显示。

jQuery(document).ready(function()

    jQuery("#submit").click(function()
        var points = jQuery("#points]").val();
        jQuery(this).prop("disabled", true);
        jQuery.ajax(
            type: 'POST',
            url: MyAjax.ajaxurl,
            data: "action": "updateRedeemPoints", "points":points,
            success: function(data)
                 jQuery("#points-success").show();
            
        );
   );

在 Ajax 错误回调中,您应该再次启用该按钮,并向用户显示错误消息(例如带有警报错误)。

【讨论】:

虽然我真的很想使用通知,或者它们在引导程序中不是默认的,但我一直在寻找什么通知呢?您是否有一个 css 示例来隐藏表单。 我不太明白你的意思。您可以将该代码 sn-p 放在表单中的某个位置,例如,就在按钮下方。然后在 CSS 中你可以说 #points-success display: none; ,这样alert会默认隐藏,javascript sn -p会在ajax调用成功时显示alert。 请看一下他们在新屏幕截图中的效果,但将其放在代码的末尾,我用短代码运行这一切,如果这有什么不同吗?。 我希望警报就像您在 freelancer.com 上看到的通知一样,当您提交项目时,您会在右下角收到一条消息?? 很高兴它成功了。请检查我的回答是否已接受。对于其他问题,您可以打开一个新线程,因为它们是关于新事物的。尽量清楚地说明问题所在,这样如果人们从未访问过 freelancer.com,他们也可以为您提供帮助......

以上是关于如何停止模式对话框中的重复条目的主要内容,如果未能解决你的问题,请参考以下文章

请问在AlertDialog中如何再此嵌入AlertDialog

从“搜索和替换”对话框中清除自定义查找条目

如何在关闭对话框的 Wix 安装程序中停止自定义操作中的进度条

打开和关闭模式后,Dirtyforms 停止工作

如何在其他应用程序上显示对话框而不是停止其他活动

停止 PHP 表单中的重复条目