重写立即调用的函数
rewrite an Immediately-Invoked Function
我有一个来自AWeber的脚本,用于弹出表单,我想对其进行一些自定义。
它当前会在页面加载时打开弹出窗口。我希望它作为按钮的单击事件运行。
问题是:它使用立即调用的函数。而且由于我是新手,还不熟悉这种模式,所以我无法弄清楚。我已经读过它,但我仍然没有完全理解它。
所以,我试图将脚本重写为一个简单的模式,但它不起作用!
那么,请您帮助弄清楚我的新功能有什么问题吗?
和/或为我简化/解释其他功能?
第一个功能:
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//forms.aweber.com/form/id.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "aweber-wjs-formid")
我的尝试 (jQuery) :
function createAweberScript() {
var script=document.createElement('script');
script.type='text/javascript';
script.id='aweber-wjs-formid';
script.src='//forms.aweber.com/form/id.js';
jQuery('body').append(script);
}
jQuery(document).ready(function () {
jQuery( 'a.button' ).click(createAweberScript);
});
只需将立即调用的函数包装在常规函数中,并在click
处理程序中调用该函数:
function createAweberScript() {
// start Aweber script
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//forms.aweber.com/form/id.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, "script", "aweber-wjs-formid"));
// end Aweber script
}
jQuery(document).ready(function () {
jQuery('a.button').click(createAweberScript);
});
你可以把它拆开并编写你自己的函数,是的,但这更容易理解和维护:如果 Aweber 函数发生变化,你只需要替换 createAweberScript()
函数中的所有内容来更新它。
注意:我得到了 404 用于http://forms.aweber.com/form/id.js
;我假设这不是您尝试使用的URL。如果是这样,您可能需要检查它。
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- HTML5(Bootstrap)通过函数调用运行动画
- 函数调用不起作用
- 函数中的Javascript函数调用