这是我的第一个问题,所以请耐心等待。
我正在为我的课程做一个练习。我必须调用一个实例化 setInterval 对象的调度程序。如果我从jQuery实例化,一切都运行良好,但是如果我从函数调用,则间隔不会开始。我不明白不同行为背后的原因。知道为什么吗?
我有一个"在服务器端"运行的node.js/express服务器,但它与此上下文无关。
这是我的网页:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
var ResetableScheduler = function(callback, miliseconds, data){
var handler;
this.start = function (){
handler = setInterval(function(){callback(data + "t(" + miliseconds + ")")}, miliseconds);
}
this.reset = function(newdata){
clearInterval(handler);
handler = setInterval(function(){callback(newdata + "t(" + miliseconds + ")")}, miliseconds);
}
this.stop = function(){
clearInterval(handler);
}
}
// runs fine
//$(function(){
// var rs = new ResetableScheduler(doTranslate_pt_en_2, 200, "Hello");
//rs.start();
//setTimeout(function() { rs.reset("JavaScript"); }, 2500);
//setTimeout(function() { rs.stop(); }, 6000);
//});
function doTranslate_pt_en_2(text){
console.log("text = " + text);
}
// prints begin and then nothing...
function begin(text)
{
console.log("begin");
var rs = new ResetableScheduler(doTranslate_pt_en_2, 200, "Hello");
rs.start();
}
</script>
</head>
<body>
<div>
<form method="post" action="/api/translate/pt/en">
<input type="textbox" id="originaltext" name="originaltext">
<input type="submit" id="translate-btn" onclick="begin(originaltext)" label="traduzir">
</form>
<input type="textbox" id="translatedtext" placeholder="<%= result %>">
</div>
</body>
</html>
将实例化代码附加到窗体的submit
事件:
$('form').on('submit', function(e) {
//e.preventDefault();
var rs = new ResetableScheduler(doTranslate_pt_en_2, 200, "Hello");
rs.start();
});
在这种情况下,您可以删除在提交按钮上附加的onclick
代码。