javascript

时间:2016-03-14 19:32:26

标签: javascript jquery

如何重写以下函数,只有在单击其中一个按钮后才返回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)实际上是一个对话框设置器,它根据参数显示不同的消息。我试图将真实传递给内联点击事件,如果用户选择点击"取消"如果用户选择"确定"。

,则阻止点击事件

7 个答案:

答案 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。