如何在按下/保持按钮期间发送值

时间:2014-07-29 12:16:59

标签: javascript jquery ajax

只要按下按钮,我想发送值。目前,只有每次点击都会发送一个值。下面提到的是当前代码:

my_script.js

 $(document).ready(function() {
  $('#left').click(function() {
    var left = 1
        $.ajax({
            url: '/stream',
            type: 'POST',
            data: { left:left }
    });
  });

my_form.html

<form>
<input type="button" value="LEFT" id="left" />
</form>

my_app.py

print request.forms.get("left")

3 个答案:

答案 0 :(得分:2)

使用mousedown事件开始间隔。

var interval = null;

$('#left').bind("mousedown", function() {
  interval = setInterval(function() {
     /* do some stuuff every 10 ms*/
  }), 10);
});

mouseup事件清除间隔。

$('#left').bind("mouseup", function() {
  clearInterval(interval);
});

答案 1 :(得分:1)

声明一个全局变量,pressed。在true上设置mousedown,在false设置mouseup。设置true后,调用如下方法:

var pressed = false;
$('#left').on("mousedown", function(){
  pressed= true;
  SendDataIfPressed();
});

$('#left').on("mouseup", function(){
  pressed = false;
});

function SendDataIfPressed() {
    if (pressed) {
        var left = 1
        $.ajax({
            url: '/stream',
            type: 'POST',
            data: { left:left },
            complete: function() { SendDataIfPressed(); }
        });
    }
}

而不是在ajax&#39;中调用SendDataIfPressed。完整的处理程序,您也可以设置像setTimeout(SendDataIfPressed, TimeInMS);这样的超时。

答案 2 :(得分:1)

您需要做的是为mouseup event添加另一个事件处理程序:

  

当在元素上释放指点设备按钮(通常是鼠标按钮)时会触发mouseup事件。

您想要做的是在单击按钮后触发循环,并在检测到mouseup事件时停止循环:

var do_loop = true; // initialize the flag to execute the request loop

// mousedown is used because a normal click event is only 
// fired when the user releases the mouse button.
$('#left').on('mousedown', function(){
  do_loop = true; // ensure the loop will be executed once button is clicked
  make_ajax_request();
});

$('#left').on('mouseup', function(){
  do_loop = false; // toggle the boolean flag to stop the loop from iterating.
});

function make_ajax_request(){
  var self = this;
  $.ajax({
    ...
    success: function(){
      // only if the loop is activated will we make another request
      if ( do_loop ){ 
        self.make_ajax_request();
      }
    }
  });
}

make_ajax_request函数是我示例的主要部分。在函数内部,一旦请求完成,它就会检查do_loop布尔标志是否设置为true - 如果是,则再次调用该函数并继续循环。如果在某个阶段捕获mouseup事件,则布尔标志将切换为false,make_ajax_request函数将不会实际执行请求,从而结束循环。