8

所以我有一个看起来像这样的提交按钮:

<a href="#" id="submitbutton" 
onClick="document.getElementById('UploaderSWF').submit();">
<img src="../images/user/create-product.png" border="0" /></a>

当我双击它时,显然是双重提交,问题是我将信息保存在数据库中,所以我将在那里有重复的信息,我不希望那样。这个上传者使用 flash 和 javscript,这里有一小段与提交相关的代码(如果有帮助的话)

$.fn.agileUploaderSubmit = function() {
    if($.browser.msie && $.browser.version == '6.0') {
        window.document.agileUploaderSWF.submit();
    } else {
        document.getElementById('agileUploaderSWF').submit();
        return false;
    }
}

感谢你们。我感谢您的帮助。这真的是我自己做不到的事情,因为我对 js 有一点经验,而且我真的不知道该怎么做。谢谢。

4

5 回答 5

12

试试这个剪断:

$('#your_submit_id').click(function(){
    $(this).attr('disabled');
});

编辑 1

哦,在你的情况下,它是一个链接,没有提交按钮......

var submitted = false;

$.fn.agileUploaderSubmit = function() {
    if ( false == submitted )
    {
        submitted = true;

        if($.browser.msie && $.browser.version == '6.0') {
            window.document.agileUploaderSWF.submit();
        } else {
            document.getElementById('agileUploaderSWF').submit();
        }
    }

    return false;
}

编辑 2

为了简化这一点,试试这个:

<!doctype html>

<html dir="ltr" lang="en">

<head>

<meta charset="utf-8" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script type="text/javascript">
<!--//--><![CDATA[//><!--
    $(document).ready(function()
    {
        $('#yourSubmitId').click(function()
        {
            $(this).attr('disabled',true);

            /* your submit stuff here */

            return false;
        });
    });
//--><!]]>
</script>

</head>
<body>

<form id="yourFormId" name="yourFormId" method="post" action="#">
    <input type="image" id="yourSubmitId" name="yourSubmitId" src="yourImage.png" alt="Submit" />
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

</body>
</html>

使用表单元素,如<input type="image" />,提交表单不是正常的链接。

这很好用!

查看jQuery.post()以提交您的表单。

祝你好运。

编辑 3

这对我也很有效:

<!doctype html>

<html dir="ltr" lang="en">

<head>

<meta charset="utf-8" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script type="text/javascript">
<!--//--><![CDATA[//><!--
    $(document).ready(function()
    {
        var agileUploaderSWFsubmitted = false;

        $('#submitbutton').click(function()
        {
            if ( false == agileUploaderSWFsubmitted )
            {
                agileUploaderSWFsubmitted = true;

                //console.log( 'click event triggered' );

                if ( $.browser.msie && $.browser.version == '6.0' )
                {
                    window.document.agileUploaderSWF.submit();
                }
                else
                {
                    document.getElementById( 'agileUploaderSWF' ).submit();
                }
            }

            return false;
        });
    });
//--><!]]>
</script>

</head>
<body>

<form id="agileUploaderSWF" name="agileUploaderSWF" method="post" action="http://your.action/script.php">
    <input type="text" id="agileUploaderSWF_text" name="agileUploaderSWF_text" />
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

<a href="#" id="submitbutton"><img src="../images/user/create-product.png" border="0" /></a>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

</body>
</html>

希望这会有所帮助。

于 2012-07-28T23:04:17.240 回答
5

Add the following to the onclick:

onclick="document.getElementById('submitbutton').disabled = true;document.getElementById('UploaderSWF').submit();"

That said, you will have to handle this double submit prevention on the server side also.

于 2012-07-28T23:06:25.580 回答
0

如果单击,这将禁用所有提交按钮和带有类 submit 或属性 data-submit 的表单中的链接:

$(document).ready(function() {
    $('form').submit(function() {
        $(this).find('input[type="submit"]').attr('disabled', true);
        $(this).find('a[data-submit], a.submit').click(function() {
            return false;
        });
    }
});

顺便说一句,这自动适用于每种形式。如果您只想要某个,请使用 id 而不是表单。不过,您很可能已经知道这一点。

于 2012-07-29T03:16:14.010 回答
0

根据http://api.jquery.com/prop/ 您可以使用 .prop() 函数添加和删除禁用的属性,而不是 .attr() 和 .removeAttr() 函数。

要添加属性:

.prop("disabled", true);

要删除该属性:

.prop("disabled", false);

希望这会帮助你。

于 2019-03-27T19:39:42.177 回答
0

如此处提议(带有示例):

如果你想确保注册的事件只被触发一次,你应该使用 jQuery 的 [one][1] :

.one( events [, data ], handler ) 返回:jQuery

描述:将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序。

于 2019-11-14T10:50:52.860 回答