只要按下按钮,我想发送值。目前,只有每次点击都会发送一个值。下面提到的是当前代码:
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")
答案 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
函数将不会实际执行请求,从而结束循环。