1

我在我的站点上有一个函数脚本,它允许我在向链接添加特定类时在新窗口中打开链接。我的网站上需要很多这样的东西,所以我想通过使用变量可以让脚本更容易编辑。

在为变量更改硬编码字符串的过程中,我的脚本停止了工作。唯一有效的是我设置url的var。

我了解到${}并不是处处有效。希望有人能指出我的想法错在哪里。还希望我掌握了正确的术语,尽管我在努力学习!:-)

var function1Name=“test_function”;var function1Url=“https://www.google.com";	var function1Class=“.test_function_class”;	函数${function1Name}(){window.open(function1Url,“_blank”,“height=200”);}jQuery(“${function1Class}”)点击(function(){${function1Name}()});

5
  • 感谢编辑@Cerbrus!
    – 罗布
    评论 2019年3月21日9:57
  • 1
    1函数${function1Name}()不是有效语法。函数名必须在运行时之前定义。2.字符串插值仅适用于模板文字,因此需要用反勾号分隔字符串:`.然而这里是完全多余的,因为你可以直接使用$(函数1类) 评论 2019年3月21日9:57
  • 1.好的,所以不可能在变量中定义函数名。谢谢,这在这里应该没有问题。
    – 罗布
    评论 2019年3月21日10:00
  • 2.我从大量的谷歌搜索和反复试验中找到了一个工作脚本。我对Javascript一无所知,在我理解你在这里所说的之前,你的答案包括了我需要谷歌的很多东西,哈哈。但是谢谢你抽出时间帮我!
    – 罗布
    评论 2019年3月21日10:02
  • 我为您添加了一个答案,解释了问题并为您提供了解决方案。 评论 2019年3月21日10:03

3个答案

重置为默认值
0

你没有使用${}是有效的JavaScript语法。

您的函数声明van将替换为:

window[function1Name]=函数(){window.open(function1Url,“_blank”,“height=200”);}

请注意,函数将不再被提升当以这种方式宣布时,操作顺序很重要。

单击处理程序可以编写如下:

jQuery(function1Class).click(function(){//注意,我只是在那里使用了变量。窗口[function1Name]();});

有一个${}JavaScript中的概念,但这仅存在于模板文本中:

const myVariable=“Foo”;const消息=`myVariable包含:“${myVariable}”!`;console.log(消息);

0

这里有几个语法问题。

首先,函数${function1Name}()不是有效语法。函数名必须在运行时之前定义。如果要动态访问函数,请将其放置在对象中,并使用变量引用设置键。

其次,${function1Name}()也是无效语法。不能动态调用这样的函数。参考上面的建议,您可以动态访问对象,因此第一点解决了这个问题。

第三,字符串插值仅在模板文字,因此您需要用回溯标记来分隔字符串:``.然而这里是完全多余的,因为你可以直接使用$(function1Class)

考虑到这些问题,下面是一个更新的示例:

var function1Name=“test_function”;var function1Url=“https://www.google.com";var function1Class=“.test_function_class”;var函数对象={[function1Name]:函数(){log(`function called,此处将打开包含${function1Url}…`的窗口);//window.open(function1Url,“_blank”,“height=200”);}}$(function1Class).单击(function(){funcObj[function1Name]()});/*另一种方法是使用模板文字,但请注意,在这里它是多余的$(`${function1Class}`).单击(function(){funcObj[函数名称]()});*/
<script src=“https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js“></script>单击我</a>

最后要注意的一点是,IE的任何版本都不支持模板文字,因此在使用它们之前,请确定您的浏览器支持要求。

2
  • 是的,它是真正地很难在答案中设置单个反勾号的格式,即使使用<代码/>不起作用 评论 2019年3月21日10:06
  • 谢谢你!这应该会让我再忙一个小时左右:-)
    – 罗布
    评论 2019年3月21日10:12
0

太酷了,我开始工作了!

var function1Name=“test_function_1”;var function1Url=“https://www.google.com";	var function1Class=“.test_function_class1”;	var function2Name=“test_function_2”;var函数2Url=“https://www.cnn.com";	var function2Class=“.test_function_class2”;	//功能1window[function1Name]=函数(){window.open(function1Url,“_blank”,“toolbar=no,status=no,scrollbars=yes,resizable=yes;top=500,left=500,width=600,height=745”);}jQuery(function1Class)点击(function(){窗口[function1Name]();});//功能2window[function2Name]=函数(){window.open(function2Url,“_blank”,“toolbar=no,status=no,scrollbars=yes,resizable=yes,top=500,left=500,width=600,height=745”);}jQuery(function2Class)点击(function(){窗口[function2Name]();});

我现在可以按照我的意图添加一组url和相应的类。对此感到非常高兴。

接下来的问题是,由于我必须实验理想的窗口参数是什么,所以我也在尝试将这些参数变成变量。我已经尝试过如何插入函数代码输出的变量的示例,但这些方法在那里不起作用。这是代码:

var窗口宽度=250var function1Name=“test_function_1”;var function1Url=“https://www.google.com";	var function1Class=“.test_function_class1”;	var function2Name=“test_function_2”;var function2Url=“https://www.cnn.com";	var function2Class=“.test_function_class2”;	//功能1window[function1Name]=函数(){window.open(function1Url,“_blank”,“toolbar=no,status=no,scrollbars=yes,resizable=yes;top=500,left=500,width=[windowWidth],height=745”);}jQuery(function1Class)点击(function(){窗口[function1Name]();});//功能2window[function2Name]=函数(){window.open(function2Url,“_blank”,“toolbar=no,status=no,scrollbars=yes,resizable=yes,top=500,left=500,width=600,height=745”);}jQuery(function2Class)点击(function(){窗口[function2Name]();});

如何在那里插入变量值(Function1的第二行)?

1
  • 也许这个后续问题更适合于一个新的主题。我将为此创建一个新问题。
    – 罗布
    评论 2019年3月21日11:31

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.