如何重写以下函数,只有在单击其中一个按钮后才返回true / false?
function something(param){
var returnValue = false;
$('.btn-ok').on('click', function(){
returnValue = false;
});
$('.btn-cancel').on('click', function(){
returnValue = true;
})
return returnValue;
}
当调用此函数时,问题当前是return returnValue;
,但我想等待它根据按钮点击设置returnValue
。
更新
道歉。我认为上面对我试图做的解释就足够了。
我使用的是带有jQuery作为前端的Bootstrap模式框和后端的JSF / Java。我有一个内联点击事件,看起来像这样
onclick="if (!changeListner()) return false;"
获取链接。这是为了覆盖JSF内联点击事件。所以这必须在那里。 changeListener()
看起来像
function changeListener(){
if(formChanged){ //formChanged is a variable that is set to true when an input value changes
return something(param);
}
return true;
}
something(param)
实际上是一个对话框设置器,它根据参数显示不同的消息。我试图将真实传递给内联点击事件,如果用户选择点击"取消"如果用户选择"确定"。
答案 0 :(得分:1)
您应该将按钮移到功能之外。如果它们在内部,您将在每次运行时继续将事件应用于选择器。
$('.btn-ok').on('click', function(){
something(false)
});
$('.btn-cancel').on('click', function(){
something(true)
})
function something(value){
var returnValue = value;
return returnValue;
}
答案 1 :(得分:1)
你可以使用回调:
function something(callback){
var returnValue = false;
$('.btn-ok').on('click', function(){
returnValue = false;
callback(returnValue);
});
$('.btn-cancel').on('click', function(){
returnValue = true;
callback(returnValue);
})
//return returnValue;
}
用法:
something(function(returnValue){
console.log("return value called")
})
答案 2 :(得分:0)
var returnValue = false;
function something(){
return returnValue;
}
$('.btn-ok').on('click', returnValue(){
returnValue = false;
something();
});
$('.btn-cancel').on('click', function(){
returnValue = true;
something();
})
答案 3 :(得分:0)
试试这段代码
$('.btn-ok').on('click', function(){
something(false);
});
$('.btn-cancel').on('click', function(){
something(true);
});
function something(someVal){
return someVal;
}
答案 4 :(得分:0)
更新:现在使用JSFiddle示例。 (可能无法在IE中工作,因为在Edge之前不包含Promise。)
https://jsfiddle.net/h91yw778/
您应该使用将在单击按钮时解析的promise API。
以下是使用ES6承诺表示法的示例。此函数使用jquery附加和删除事件处理程序,当单击其中一个按钮时将删除该事件处理程序。单击它时,将使用返回值解析promise。由于这是一个承诺,它有一个"然后"结果作为第一个参数传递给的方法(可以使用函数使用。)
function handleButtonsWithPromise() {
var button1 = $("#button1Id");
var button2 = $("#button2Id");
//ES6 Promise API; others exist, including jquery deferred.
return new Promise( function(resolve, reject) {
var onButton1Click = function (event) {
//...;
resolve(true); //resolves the promise with the value of true;
button1.off('click', '**', onButton1Click); //clean up event handlers if necessary
button2.off('click', '**', onButton2Click); //clean up event handlers if necessary
};
var onButton2Click = function (event) {
//...;
resolve(false); //resolves the promise with false;
button1.off('click', '**', onButton1Click); //clean up event handlers if necessary
button2.off('click', '**', onButton2Click); //clean up event handlers if necessary
};
button1.on('click', onButton1Click);
button2.on('click', onButton2Click);
});
}
handleButtonsWithPromise().then(result => {
console.log(result);
//...
)
答案 5 :(得分:0)
我会为每个元素使用相同的类,并为每个元素使用另一个唯一的类/ id名称,然后添加以下代码:
$('.common-class').click(function(){
return $(this).hasClass('unique-1');
})
答案 6 :(得分:0)
除非您需要该功能来执行其他操作,否则您应该使用以下内容:
var returnValue = false; // or true depending on your default value
$('.btn-ok').on('click', function(){
returnValue = false;
});
$('.btn-cancel').on('click', function(){
returnValue = true;
});
然后在需要时使用变量returnValue。