【问题标题】:Jquery calling an object with a dynamically created variableJquery 使用动态创建的变量调用对象
【发布时间】:2014-02-16 20:50:50
【问题描述】:

我想我一定是错误地搜索了这个,因为我还没有找到任何解决方案。我正在使用 wiris 编辑器来允许用户创建富文本区域,然后由其他用户填充。 wiris 的每个实例都有一个基于已创建的编辑器数量的动态填充名称。 $t 只是一个计数器。

editor<?php echo $t ?> = com.wiris.jsEditor.JsEditor.newInstance({'language': 'en'});

然后我需要检索每个特定编辑器的内容。

如果我输入文字对象名称

var ml = editor3.getMathML(); 

一切正常,但是当我尝试使用变量来访问动态创建的对象名称时

var dynamicName = 'editor'+t;
    var ml = dynamicName.getMathML();

我收到以下错误:

Uncaught TypeError: Object editor3 has no method 'getMathML'

如何使用dynamicName中创建的字符串来调用editor3对象?

【问题讨论】:

  • dynamicName 是一个字符串。您需要使用 eval 之类的东西来让 javascript 评估(并执行)命令。你可以试试var editor = eval(dynamicName); editor.getMathML(); 之类的东西。它可能会起作用。但是要小心eval,因为如果有人可以在其中注入讨厌的javascript,它将被执行。
  • 另一个想法 - 你在标题中提到了 jQuery。是否有其他方法可以使用 dom 选择器访问编辑器?你可能最好做类似var editor_selector = '#id_of_editor' + t; var ml = $(editor_selector).getMathML() 的事情。如果没有看到编辑器是如何设置的以及 jQuery 插件是如何工作的,我不确定这是否可行。但如果可以的话,这种方法会比我上面建议的 eval 更安全。
  • 谢谢,eval 成功了。我将尝试像您提到的那样找到适合我的条件的解决方法,但是正在评估的 t 变量是计数器,而不是输入字段,因此我设法使用 eval 使其安全。
  • 你不使用数组的原因是什么?

标签: jquery oop


【解决方案1】:

我认为dynamicName 不是你的对象:它应该是字符串editor3 但我无法解释错误信息;我认为消息应该是Object dynamicName has no method 'getMathML'...,也许消息中的名称​​dynamicName被对象dynamicName的方法toString的返回值替换,所以字符串editor3 本身...

无论如何,您可以尝试以下方法:

var dynamicObj = eval('editor' + t);
var ml = dynamicObj.getMathML();

【讨论】:

  • 对于错误消息,控制台从不打印变量名,它总是创建值的字符串表示。而对于字符串,这就是字符串本身的内容。
猜你喜欢
  • 1970-01-01
  • 2018-07-14
  • 2011-04-23
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多