【问题标题】:How to return the value of a function after button click in JQuery?在JQuery中单击按钮后如何返回函数的值?
【发布时间】:2019-02-06 05:45:04
【问题描述】:

我有一个函数,它在调用时将输出返回到一个 promise 函数。

我有一个 executeScript 方法,它动态处理 Javascript 方法并返回关于这些方法返回什么的承诺。

基础骨架

Ref.executeScript({
                code: "getData(); function getData(){ var res = 'Hello'; return res;}",
            function(results){
     console.log(results); ////THIS RETURNS "Hello"
   });

当代码直接返回一个变量时,它可以工作。例如,以下代码在执行时返回 Hello。

getData();
 function getData(){
   var res = "Hello";
   return res;
  }

但是如果我在点击事件中返回它,它会返回之前的值“Hello” 而不是单击按钮时的“Hello2”。我希望返回“Hello2”。

getData();
function getData(){
 var res = "Hello";
 jQuery("#myButton").on('click', function(){
   res = "Hello2";
   alert(res); //this gets called
  });
return res;
}

更新了原始问题以提供更清晰的说明

【问题讨论】:

  • 您对jQuery('#myButton').on(...) 所做的所有功能就是在您的#myButton 元素上建立一个点击事件监听器。您应该让该侦听器执行所需的语句,因为它们只会在您单击元素时发生
  • 您实际上不太可能“需要”。你应该解释什么时候会发生什么,记住任何点击事件都将在getData()完成执行后很长时间被触发。
  • .executeScript() 是否用于 Chromium/Chrome 扩展程序?
  • @SouravDas documentation 似乎没有提到为details 处理异步进程 “如果注入的脚本是代码类型,则回调使用单个参数执行,即脚本的返回值,包装在一个数组中。” 虽然 answer 声明 .executeScript() 是一个 Promise,其中 .then() 可以被链接。
  • @SouravDas 没试过 Cordova InAppBrowser,未经测试function getData() { return new Promise(function(resolve) { jQuery("#myButton").on('click', function() { resolve("Hello2") }) }) }

标签: javascript jquery cordova anonymous-function inappbrowser


【解决方案1】:

当然它仍然返回“Hello”,因为当您调用该函数时,它不会进入 click 函数。你的函数真正做的是为点击事件设置一个动作,而不是调用它。 您不能真正在单击事件函数中返回值,我无法想象您在哪里需要它。 您可以尝试使用这样的超出范围的变量,但我不建议这样做:

var hasBeenClicked = false;
jQuery("myButton").on('click', function(){ 
     hasBeenClicked = true;
});

function buttonWasClicked() {
     var res = hasBeenClicked;
     hasBeenClicked = false;
     return res;
});

【讨论】:

    【解决方案2】:

    我认为你想更新点击事件的值,你必须使用 javascript 原型试试这个

    function GetData(){
       this.res = "Hello";
    
    } 
    jQuery("#myButton").on('click', function(){
    
       GetData.prototype.res = "Hello2";
         alert(res); //this gets called
      });
      getData  = new GetData();
      console.log (getData.res)
    

    【讨论】:

      【解决方案3】:

      你应该这样写:

      var res = '';
      function getData(){
          res = "Hello";
          return res;
      }
      
      $(document).ready(function() {
          $("#myButton").click(function(e){
             e.preventDefault(); //if you have form to submit
             res = "Hello2";
          });
      });
      

      【讨论】:

      • 通过点击 id='myButton' 的按钮,res 的值将是 'Hello2'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2017-07-11
      • 2021-09-13
      • 1970-01-01
      • 2016-01-11
      相关资源
      最近更新 更多