5

我正在使用 Speech-to-Text 软件输入一个字段,因为没有屏幕或鼠标或键盘,我需要在此字段中没有输入(实际上是说话)3 秒后发送此表单,但该字段应该'不要为空

我正在使用 PHP,但我想解决方案是 JavaScript 或 jQuery,我对这两个不太了解,所以如果您也能解释如何使用它,我将不胜感激。

4

3 回答 3

5

从根本上说,您需要捕获按键事件并启动计时器。如果计时器在按下另一个键之前用完,请提交表单

使用 jQuery 检测按键是这样完成的:

$('#ElementId').keypress(function() {
    /* Your code */
});

您可以使用该setTimeout()方法计时 3 秒(请参阅此处

最后,使用此处submit()所示的 jQuery提交表单

您可能还想focus()页面加载后将焦点移至文本输入,以便 SR 在正确的位置“键入”,

此外,这篇文章很好地介绍了 JS 中的计时事件,包括如何取消它们

简而言之,你想要这样的东西(经过测试):

$(document).ready(function(){

    var Timeout; //For reference to timeout
    var DelayInMs=3000;
    $("#SRInput").focus(); //Give focus to input on document ready

    //When input is received, (re)set the timer
    $("#SRInput").keypress(function() {
        if(Timeout) {clearTimeout(Timeout);} //Clear existing timeout, if any
        Timeout = setTimeout(function(){$("#SRForm").submit();}, DelayInMs);
    });

});

<form id="SRForm" method = ... >
    <input type="text" name="SRInput" id="SRInput"/>
</form>

(由于闭包,这些Timeout/ DelayInMsvars 仍然在事件的范围内)顺便说一句,这有一个额外的好处,即在第一次按键之后才开始计时器 - 所以你可以花多长时间来开始说话)。

于 2012-07-24T21:30:17.720 回答
4
$(function() {
    var time = 0;
    $("textarea").keyup(function() {
        time = 0;
    });

    var int = self.setInterval(function() {
        var s = $("textarea").val();
        if (time++ == 3) {
            if (s != "") alert(s);
            time = 0;
        }
    }, 1000);
});​

演示

更新:

正如@Tim Down 所说

The keypress event is designed for handling the a character typed by the user 
rather than detecting keyboard activity and the delete and backspace keys 
do not generate characters. Some browsers blur this line somewhat but 
the general principle is that the keyup and keydown events are there to detect 
any key being pressed and telling you about which key it is while keypress is 
for detecting an actual character being typed.

因此,如果您使用 keyup 而不是 keypress 会更好,那么您的计时器清除适用于任何键。

于 2012-07-24T21:35:20.530 回答
0

我想你可以使用http://narf.pl/jquery-typing/jquery.typing-0.2.0.min.js

看看http://narf.pl/jquery-typing/

$(':text').typing({
    start: function (event, $elem) {
       // do nothing
    },
    stop: function (event, $elem) {
       // send your form
    },
    delay: 3000
});

希望这可以帮助

于 2012-07-24T21:30:54.120 回答