【问题标题】:delay form input function by 3 seconds before executing在执行前将表单输入函数延迟 3 秒
【发布时间】:2013-10-17 12:52:00
【问题描述】:

我对@9​​87654321@ 不是很好,因为它的存在并慢慢开始掌握它:我有一个小型(工作)网络摄像头应用程序,它拍摄照片并将 base64 插入(隐藏)#formfield b4发布表格 ->

button code:
<input type="image" src="images/takepic.jpg"  id="btn1" onclick="base64_tofield()">


function base64_tofield() {

                $('#formfield').val($.scriptcam.getFrameAsBase64());
};

我需要一个 div 在按钮实际提交之前显示倒计时 3.. 2.. 1(秒) - 有没有办法将此功能延迟 3 秒并设置计时器?- 这样 ppl 可以准备好拍照了。。

我试过了

setTimeout(function() { base64_tofield() },5000);

在不同的地方但不工作 - 它仍然需要立即。倒计时 div 必须添加并且除了倒计时之外没有其他功能,因此用户有时间准备。

按钮将 base64 数据抓取到表单域并提交表单。我认为延迟函数可能会延迟表单,但事实并非如此,我认为我需要将表单延迟 3.5 秒 - 函数3.. 因此,当用户点击“拍照”时,计时器启动,3 秒后 - 函数 base64_tofield() 触发(拍照),然后 1/2 秒后表单提交..

它只是让用户有时间在提交之前为噱头镜头做准备

【问题讨论】:

  • wait.. 这个 scriptcam 插件是否能够在不询问我的情况下捕获我的网络摄像头?这可以放入隐藏的框架中吗?对我来说听起来像是巫术或反隐私
  • 应该有一个允许/拒绝的 Flash 播放器窗口 - 它用于促销压缩。脚本摄像机非常流行

标签: jquery forms function delay


【解决方案1】:

只需将所有内容包装到setTimeout JS 计时器中...

setTimeout(base64_tofield(), 2000);

...或者您可以在提交时使用delay() 函数。

【讨论】:

  • 这也会延迟实际拍摄的照片吗?你能显示完整的代码吗 - 我不知道在哪里包装函数 - 抱歉我的 js 很可怜 -
【解决方案2】:

您需要在 onclick 函数中返回 false,否则表单将立即发布。或者,您可以使用 jQuery 绑定到提交事件,并使用 event.preventDefault();

<form id="form1" method="post" action="">
    <div id="countdown"></div>
    <input type="hidden" name="encryptedImage" id="formfield" />
    <input id="submitform" type="submit" name="capture" value="capture"></input>
</form>
<script>
$(function() {
    $('#form1').submit(function(e) {
        base64_tofield();
        e.preventDefault();
    });


    function base64_tofield() {
        var interval;
        var countdown = 4;

        interval = setInterval(function() {
            $('#countdown').html(--countdown);
            if(countdown === 0){
                $('#formfield').val($.scriptcam.getFrameAsBase64());
                $('#form1')[0].submit();
            };
        }, 1000);
    };
});
</script>

如果我对你的理解正确,上面的代码会做你想做的事,在提交表单之前等待 3 秒。

【讨论】:

  • tx - 关闭,额外的一秒只是为了在实际捕获图像数据和提交表单之间留出时间。在 mo 它几乎工作 - 所以我怀疑 0.5 秒是必要的 - 无论如何,表格仍在破解 - 没有延迟。我假设我给表格一个 id 并改变你的 $('#idofform').submit();反映这一点?
  • 是的,没错。我已经简化了这个例子并让它在这个 jsfiddle 上工作。 jsfiddle.net/URvdU/1我已经更新了我的答案以反映这些变化。
【解决方案3】:
<input type="text" id="countdown" value="3" />
<input type="button" id="begincountdown" value="Start Countdown" />

<script>
    function base64_tofield() {
       console.log( 'Encode!' );   
    }

    $('#begincountdown').on( 'click', function() {
        var secondscounter = 3,
            countdown = setInterval(function(){ 
                $('#countdown').val( secondscounter-- );
                if ( !secondscounter ) {
                  clearInterval( countdown ); 
                  base64_tofield();
                }
        }, 3000 );
    });
</script>

小提琴: http://jsfiddle.net/XytRt/27/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 2018-10-25
    • 1970-01-01
    • 2022-01-27
    • 2011-04-02
    • 1970-01-01
    • 2019-11-03
    • 2011-01-01
    相关资源
    最近更新 更多