相关疑难解决方法(0)

如何将String转换为javascript函数调用(带对象的情况)

是的,有很多问题,例如如何将字符串转换为javascript函数调用?或者当我将其名称作为字符串时如何执行JavaScript函数.

但是,如果我们没有普通的函数名称,而是实际上是函数的对象属性名称呢?

喜欢:

var callMe = 'foo.bar.baz';
Run Code Online (Sandbox Code Playgroud)

和期望被调用的代码是:

window.foo = {
    bar: {
        baz: function() {
            alert('Eureka!');
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

为什么我需要这个:回调参数通过url传递,它可以(通过应用程序设计)是函数名或对象属性的FQN.

除了以外的任何想法eval()

UPD:

我最后的实施:

var parts = callbackName.split('.'),
    callback;

for (i in parts) {
    if (!callback) {
        callback = window[parts[i]];
    } else {
        callback = callback[parts[i]];
    }

    if (typeof callback === 'undefined') break;
}

if (typeof callback === 'function') {
    callback();
} else {
    console.error('Passed callback is not a valid function');
}
Run Code Online (Sandbox Code Playgroud)

javascript

3
推荐指数
1
解决办法
427
查看次数

通过JSON传递JavaScript函数

我有一个服务器端Python脚本,它返回一个包含客户端JavaScript参数的JSON字符串.

# Python
import simplejson as json

def server_script()
  params = {'formatting_function': 'foobarfun'}
  return json.dumps(params)
Run Code Online (Sandbox Code Playgroud)

foobarfun应该引用JavaScript函数.这是我的主要客户端脚本

// JavaScript
function client_script() {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, async=true);
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      options = JSON.parse(xhr.responseText);
      options.formatting_function();
    }
  };
  xhr.send(null);
}

function foobarfun() {
  //do_something_funny_here...
}
Run Code Online (Sandbox Code Playgroud)

当然,options.formatting_function()会抱怨"字符串不可调用"或类似的东西.

在使用Chrome的Inspect Element后,在Resources选项卡下,并导航左侧边栏以进行XHR>查询,我发现client_script解释options如下.foobarfun被视为一个字符串.

// JavaScript
options = {"formatting_function": "foobarfun"}
Run Code Online (Sandbox Code Playgroud)

我本来希望client_script看到options

// …
Run Code Online (Sandbox Code Playgroud)

javascript json function object

2
推荐指数
1
解决办法
1万
查看次数

的JavaScript.如果方法命名为字符串加args,我如何调用原型方法?

我有一个带有一组原型方法的对象.如何调用给定的名称和arg列表?

所以我有和反对:

scarpa.MyThing = function() {
}
Run Code Online (Sandbox Code Playgroud)

MyThing 有一个原型方法:

scarpa.MyThing.prototype.beAwesome = function(a, b, c) {
    // do awesome stuff here with a, b, and c
}
Run Code Online (Sandbox Code Playgroud)

现在,我想beAwesome从另一个原型方法调用:

scarpa.MyThing.prototype.genericCaller = function(methodName, d, e, f) {

    // this does not work for me
    this.call(methodName, d, e, f)

}
Run Code Online (Sandbox Code Playgroud)

以下是致电genericCaller:

this.genericCaller('beAwesome', alpha, zeta, bravo);
Run Code Online (Sandbox Code Playgroud)

我坚持使用正确的语法进行调用genericCaller.

有人可以赐教吗?谢谢.

javascript prototype

2
推荐指数
1
解决办法
936
查看次数

按名称执行函数,将对象作为参数传递

这是问题 - 我知道函数的名称(并且该函数已经从外部脚本加载),但我没有实际的函数对象可供我调用.通常我会调用eval(function_name +"(arg1,arg2)"),但在我的情况下,我需要传递一个对象,而不是字符串.简单的例子:

var div = document.getElementById('myDiv')
var func = "function_name" -- this function expects a DOM element passed, not id
Run Code Online (Sandbox Code Playgroud)

我该如何执行这个功能?

谢谢!安德烈

javascript method-call

1
推荐指数
1
解决办法
307
查看次数

jquery:调用一个函数

好吧,我正在使用一些jquery创建动态弹出窗口.但是,定期响应将是我需要调用的函数的名称而不是实际数据,我试图弄清楚如何执行此操作.

success: function(response) {
                                var obj = $.parseJSON(response);
                                if (obj.response == 'false') {
                                    $('#popuperrDisplay').html(obj.msg);
                                    $('#popuperrors').show();
                                } else {
                                    if (obj.response == 'redirect') {
                                        window.location.href = obj.msg; 
                                    } else if (obj.response == 'function') {
                                        call obj
                                    } else {
                                        $(this).dialog('close');
                                    }
                                }
                            }
Run Code Online (Sandbox Code Playgroud)

这是我的jquery的当前部分.我需要弄清楚如何通过json_encode发送JS函数的名称,并让JS实际调用该函数

javascript jquery function dynamic

1
推荐指数
1
解决办法
397
查看次数

当我将其名称作为字符串时,如何执行方法

今天在接受采访时(初级网络开发者),面试官问我这个问题:

如何将名称作为字符串(在javascript和C#中)执行方法

我不能回答:(

现在,当我搜索时,我发现了这个问题当我将其名称作为字符串时如何执行JavaScript函数

但是如何在c#中做到这一点?

c#

1
推荐指数
1
解决办法
529
查看次数

如何在不使用Eval的情况下调用匿名函数?

我有一个自动完成功能,回调数据返回.许多不同的实例都使用此自动完成功能.

$.fn.acItem = function(callback){
  var self = this;
  $(self).autocomplete({
    (...)
    select: function(e, ui){
      // Eval for calling anonymous function (right?)
      window[callback](ui.item);
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

我也在使用命名空间

var Agency = {
  init: function() {
    var self = this;
    self.registerAgency.addItem();
  },

  registerAgency: {
  (...)
    addItem: function(item){
      if(!item){
        (...)
        // Initiate autocomplete on input
        $('.search-item').acItem('Agency.registerAgency.addItem');
      } else {   
        // Do something with Item
      }
    }
}

Agency.init();
Run Code Online (Sandbox Code Playgroud)

window[callback](ui.item)如果我没有使用命名空间,请使用作品.但是对于命名空间,它会变得有点复杂,如Jason Bunting描述的那样.

由于使用了不同的命名空间acItem(),因此需要知道在回调中调用哪个函数.但许多人强烈反对使用Eval来调用匿名函数.

那么对匿名函数进行回调的好方法是什么?

javascript eval callback anonymous-function

1
推荐指数
1
解决办法
94
查看次数

Javascript执行onkeyup函数

我在HTML中输入以下内容:

<div class="form-group">
    <label for="siretNumber">Numéro de SIRET</label>
    <input onkeyup="checkSIRET(this);" onfocusout="ocr_on_fly(true, this, true)" onfocusin="ocr_on_fly(false, this, true);" type="text" class="form-control" id="siretNumber" value="{{ pdf['siret'] }}">
</div>
<div class="form-group">
     <label for="sirenNumber">Numéro de SIREN</label>
     <input onkeyup="checkSIREN(this)" onfocusout="ocr_on_fly(true, this, true)" onfocusin="ocr_on_fly(false, this, true)" type="text" class="form-control" id="sirenNumber" value="{{ pdf['siret'] }}">
</div>
Run Code Online (Sandbox Code Playgroud)

ocr_on_fly功能上,我需要自动执行onkeyup属性的功能。通过下面的代码,我得到了onkeyupattr 的值,但是我该如何执行呢?

let attr = input.getAttribute('onkeyup')
// attr = checkSIRET(this); or attr = checkSIREN(this);
Run Code Online (Sandbox Code Playgroud)

提前致谢

html javascript

1
推荐指数
1
解决办法
78
查看次数

连接变量和函数名称

我们要连接函数名称和变量名称。单击<a>标签应发生这种情况。

我们如何连接函数和变量名?

问题:

  • 我们收到错误消息fn_dataId()未定义

所需的输出:

fn_dataId() should be fn_some123();

我们尝试了什么

$(function() {
    $('.link').on('click', function() {
      console.log('clicked');
      var dataId = $(this).attr('data-id');
      console.log('data id - ' + dataId);
      
      // What we tried, but didn't work. 
      fn_dataId(); 
    });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a data-id="some123" class="link">
Click here
</a>
Run Code Online (Sandbox Code Playgroud)

html javascript jquery hyperlink

1
推荐指数
1
解决办法
60
查看次数

如何检索Google Drive文件的所有Get/Is函数结果?

总体的目标:

我正在循环访问各种文件,并试图找到一种方法来动态列出/捕获尽可能多的来自GAS 文件对象的信息。

如果我采用非动态方法,我会输入我想要捕获的每个属性,如下所示:

  var zText = 'File Id:' + aFile.getId();
  zText += "\n" + "getName: " + aFile.getName();
  zText += "\n" + "getDateCreated: " + aFile.getDateCreated();
  zText += "\n" + "getSize: " + aFile.getSize();
Run Code Online (Sandbox Code Playgroud)

ETC...

虽然上述方法最终会得到我想要的,但我想避免查找所有属性名称。我知道许多属性可能无法转换为字符串,但我希望至少按名称将它们隔离。

我尝试过的

我认为我的问题与使用 stringify 的问题类似。但是,这不适用于 Google File 对象(它只返回字符串值{})。我猜这是因为很多属性都在调用函数?

我可以使用以下命令获取作为字符串列出的文件的所有属性/函数:Object.keys(aFile).forEach((prop)=> Logger.log(prop ));

但是,这不会返回每个函数的结果,其中许多是我不想执行的函数(即makeCopy)。

虽然可能有更好的方法,但我假设尝试执行以或开头的所有属性/函数可能是安全的。我不知道如何做到这一点,也找不到任何与此类用例匹配的内容。我确实看到了这篇关于使用executeFunctionByName的文章,但这在应用程序脚本环境中不起作用。如果它确实有效,我会使用类似的东西..getis

var allKeys =  Object.keys(aFile);
for(var i=0;i<allKeys.length;i++){
 var eachProperty = allKeys[i];
 
 if(eachProperty.search(RegExp("^get|^is"))>-1 ){
  //??? run …
Run Code Online (Sandbox Code Playgroud)

javascript google-apps-script

1
推荐指数
1
解决办法
66
查看次数