preventDefault()不会阻止表单发送

时间:2015-01-16 08:54:50

标签: javascript jquery html forms

我有一个html代码段

<form action="domains.php#searchdomain" method="post" name="m_domain">
      <a name="searchdomain"></a>
        <table class="dataTable" width="100%" border="0" cellspacing="0" cellpadding="5" id="" style="text-align:center; margin-top:0px; border-left:1px solid #ddd; border-right:1px solid #ddd; border-top:1px solid #ddd;">
          <tr>
            <td align="left" colspan="2"><div id="display_message" <?php echo $sstyle; ?>><?php echo $dis_msg; ?></div></td>
          </tr>
          <tr>
            <td align="left">Search Domain</td>
            <td align="left" style="display:none;" id="apply_text">Replace Selected Domains With</td>
          </tr>

          <tr>
            <td align="center"><table width="100%" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td><input class="input_field" name="search_domain" id="search_domain" value="<?php echo $search_domain; ?>" type="text"></td>
                  <td>&nbsp;</td>
                  <td><input type="submit" class="btn blue_button" name="submit" value="Search"></td>
                </tr>
              </table></td>
            <td align="center"><table width="100%" border="0" cellspacing="0" cellpadding="0" id="apply_button" style="display:none;">
                <tr>
                  <td><input class="input_field" name="domain_name_url" id="domain_name_url" value="<?php echo $domain_name_url; ?>" type="text"></td>
                  <td>&nbsp;
                  <input name="domain_replace_id" id="domain_replace_id" 
                  value="" type="hidden">
                  <input name="domain_replace_link" id="domain_replace_link" 
                  value="" type="hidden">
                  </td>
                  <td><input type="submit" class="btn blue_button" name="submit" value="Apply" onclick="return validate();"></td>
                </tr>
              </table></td>
          </tr>
          <tr>
            <td align="center">
                <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                      <td><input type="checkbox" name="status_domain" id="status_domain" <?php if($status_domain){?> checked <?php } ?>>&nbsp;Include inactive campaigns in search.</td>
                      <td>&nbsp;</td>
                      <td>&nbsp;</td>
                    </tr>
                </table>
            </td>
            <td align="center">&nbsp;</td>
          </tr>

        </table>
        <?php
        echo '<div style="border-bottom:1px solid #ddd; border-left:1px solid #ddd; border-right:1px solid #ddd;  width:100%; padding:10px;">';
        if(sizeof($request_list) > 0)
        {
        echo ' 
        <div class="pg_wrapper">
        <div class="progress" style="width:80%;float: left;position: relative; top: 0; z-index: 999; display: none;"><div class="progress-bar" role="progressbar" aria-valuenow="60"   aria-valuemin="0" aria-valuemax="100" ></div></div><div id="cancel_load" style="float: left; height: 23px; font-size: 12px; vertical-align:middle; padding-left: 5px; display: none;"><a style="color:#428bca;" href="javascript:void(0);" ><strong>Cancel</strong></a>
        </div>
        <div class="clearfix"></div>
        </div>
        ';
        }
        echo '</div>';
        ?>
        <div id="lp_pages_table" style="padding: 10px; border-left: 1px solid #ddd; border-right: 1px solid #ddd; border-bottom: 1px solid #ddd;">
            <table class="display compact" width="100%" border="0" cellspacing="0" cellpadding="5" id="domains_list" style="margin-top:0px; border:1px solid #ddd;">
                <thead>
                    <tr>
                    <th style="text-align:center;"><input type="checkbox" name="chk_all" class="checkall" id="checkedAll"></th>
                    <th>URL</th>
                    <th>Type</th>
                    <th>ID</th>
                    <th>Campaign</th>
                    <th>Status</th>
                    </tr>
                </thead>
            </table>

        </div>
        </form>

现在我有以下jquery代码片段

<script>
$(document).bind('keyup', function(e) 
{
    if (e.keyCode === 13) 
    {
        alert($('#domain_name_url').is(':focus'));
        if($('#domain_name_url').is(':focus')) 
        {
            alert("focus was on replace");
            e.preventDefault();
            return false;
        }
    }
});
</script>

我的问题是,

这样可以正常工作,但问题是,因为还有一个文本框和一个提交按钮,所以每当我按Enter键时,表单都会提交

所以我想限制这样的提交。

  1. 如果当前焦点位于文本框#domain_name_url并且按下了输入,则表单将不会被提交并且将调用验证函数。

  2. 如果当前焦点位于文本框#search_domain并按下了输入,则表单将被提交并且不会调用验证。

  3. 在jquery代码段中,问题是

    if($('#domain_name_url').is(':focus')) 
            {
    // the flow is entering into this statement, but the preventDefault() seems not working
                alert("focus was on replace");
                e.preventDefault();
                return false;
            }
    

3 个答案:

答案 0 :(得分:6)

要阻止发送表单,您应该阻止onsubmit事件。例如:

$('form[name="m_domain"]').on('submit', function(event){
    event.preventDefault();
    return false;
}

答案 1 :(得分:0)

每次执行提交按钮时都可能需要停止:

$(".blue_button").click(function(e) {
    validate();
    e.preventDefault();
});

并在此事件内部调用validate()函数以获取数据以及数据所需的所有其他内容。

这就是为什么提交按钮,在html中,始终将数据提交到标记的操作URL,但如果您手动停止执行提交操作则不会。然后在js中你必须调用validate()函数来检查用户是否按下了enter按钮等等。

答案 2 :(得分:0)

我不确定这是否适用于您的示例,但请尝试一下:

<script>
$(document).bind('keyup', function(e) 
{
    if (e.keyCode === 13) 
    {
        e.preventDefault();
        alert($('#domain_name_url').is(':focus'));
        if($('#domain_name_url').not(':focus')) // note this has changed to  NOT(':focus')
        {
            $('#domain_name_url').parents("form").submit();
            //alert("focus was on replace");
            //return false;
        }
    }
});
</script>

您可能还需要绑定到keydown事件而不是keyup