Javascript 基于用户输入的返回值
使用jQuery(1.7),而不是jQueryUI-(如何)可以完成以下任务Javascript 基于用户输入的返回值,javascript,jquery,Javascript,Jquery,使用jQuery(1.7),而不是jQueryUI-(如何)可以完成以下任务 调用函数1 在函数1中,定义了一个变量并将其设置为 职能2的成果 调用函数2“动态”时,如果 单击第一个按钮,返回值“true”,第二个按钮返回值“false” 在函数1中,设置为函数2的结果的变量应等待用户输入并返回值 然后应评估该值 在jQuery中有没有办法不使用间隔/超时等来继续查找设置为用户输入的中间值 我概述了以下原则: function function1(){ var myVariable
- 调用函数1
- 在函数1中,定义了一个变量并将其设置为 职能2的成果
- 调用函数2“动态”时,如果 单击第一个按钮,返回值“true”,第二个按钮返回值“false”
- 在函数1中,设置为函数2的结果的变量应等待用户输入并返回值
- 然后应评估该值
function function1(){
var myVariable=function2;
// nothing should happen at this point until function2 has returned a response
if(myVariable){
alert('true');
}else{
alert('false');
}
}
function function2(){
var yesbutton=$("<input type='submit' value='yes' />");
var nobutton=$("<input type='submit' value='no' />");
$('body').append(yesbutton)
$('body').append(nobutton)
nobutton.click(function(){
return false;
});
yesbutton.click(function(){
return true;
});
}
function1();
函数function1(){
var myVariable=function2;
//在function2返回响应之前,此时不应发生任何事情
if(myVariable){
警报(“真”);
}否则{
警报(“假”);
}
}
函数function2(){
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(函数(){
返回false;
});
yesbutton.单击(函数(){
返回true;
});
}
功能1();
一如既往,非常感谢您的帮助 您不能这样做,因为function2已经执行,并且
click
处理程序中function2
的返回值将不是它的返回值。但您可以使用一个函数来实现它
function function1(){
var yesbutton=$("<input type='submit' value='yes' />");
var nobutton=$("<input type='submit' value='no' />");
$('body').append(yesbutton)
$('body').append(nobutton)
nobutton.click(function(){
alert('false');
});
yesbutton.click(function(){
alert('true');
});
}
函数function1(){
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(函数(){
警报(“假”);
});
yesbutton.单击(函数(){
警报(“真”);
});
}
或者你也可以这样做
function function2(yesClickHandler, noClickHandler){
var deferred = $.Deferred();
var yesbutton=$("<input type='submit' value='yes' />");
var nobutton=$("<input type='submit' value='no' />");
$('body').append(yesbutton).append(nobutton);
nobutton.click(noClickHandler);
yesbutton.click(yesClickHandler);
return deferred.promise();
}
function2(function(){
alert('true');
}, function(){
alert('false');
});
函数2(yesClickHandler、noClickHandler){
var deferred=$.deferred();
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(yesbutton).append(nobutton);
单击(noClickHandler);
yesbutton.单击(yesClickHandler);
延迟返回。承诺();
}
函数2(函数(){
警报(“真”);
},函数(){
警报(“假”);
});
这是可能的,只是可能不是你期望的那样
function function1(){
var myVariable=function2();
// nothing should happen at this point until function2 has returned a response
myVariable.done(function(){
alert('true');
}).fail(function(){
alert('false');
});
}
function function2(){
var deferred = $.Deferred();
var yesbutton=$("<input type='submit' value='yes' />");
var nobutton=$("<input type='submit' value='no' />");
$('body').append(yesbutton)
$('body').append(nobutton)
nobutton.click(deferred.reject);
yesbutton.click(deferred.resolve);
return deferred.promise().always(function(){
yesbutton.add(nobutton).remove();
});
}
function1();
函数function1(){
var myVariable=function2();
//在function2返回响应之前,此时不应发生任何事情
myVariable.done(函数(){
警报(“真”);
}).fail(函数(){
警报(“假”);
});
}
函数function2(){
var deferred=$.deferred();
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(延迟.拒绝);
是按钮。单击(延迟。解决);
return deferred.promise().always(函数()){
添加(nobutton.remove();
});
}
功能1();
在功能1中使用此选项:
var myVariable=function2();
您可以通过回调来实现它。然而,在理想情况下,最好利用事件机制,在该机制中侦听并触发事件来更新变量,但是对于这个简单的示例,这需要付出更多的努力
function function1(){
function2(function(myVariable){
if(myVariable){
alert('true');
}else{
alert('false');
}
};
}
function function2(callback){
var yesbutton=$("<input type='submit' value='yes' />");
var nobutton=$("<input type='submit' value='no' />");
$('body').append(yesbutton)
$('body').append(nobutton)
nobutton.click(function(){
callback(false);
});
yesbutton.click(function(){
callback(true);
});
}
function1();
函数function1(){
函数2(函数(myVariable){
if(myVariable){
警报(“真”);
}否则{
警报(“假”);
}
};
}
函数2(回调){
var yesbutton=$(“”);
var nobutton=$(“”);
$('body').append(是按钮)
$('body').append(nobutton)
nobutton.click(函数(){
回调(假);
});
yesbutton.单击(函数(){
回调(true);
});
}
功能1();
用户输入是异步的,除非您使用模式对话框,如提示符
,确认
,或显示模态对话框
。否则您必须使用回调。如何实现回调?@ErgoSummary Shankar的解决方案使用回调。好吧,等等。事实上,但是让函数2旋转的原因是什么另外,它可以在其他地方重新调整用途-可能还有其他类似于函数1的函数出现…在这种情况下,您可以将回调传递给函数2并使用它。谢谢-看得更近一些,凯文建议的延迟选项确实有效-我对传递“是/否”单击处理程序很感兴趣?我认为这个解决方案比不同的sol更好注意。您可以同时多次重复使用它。您也可以同时多次使用我的,因为每次使用它时它都会创建一个新的延迟对象。我唯一不喜欢的是我的回调名为done
和fail
,而不是yes
和no
,这使得我它的可读性有点差。