javascript - 如何在javascript中为函数分配参数而不执行它?

标签 javascript html

我的目标是在使用 JavaScript 单击按钮元素时更改按钮元素的边框样式。我创建了一个函数 setBorder 并将其分配给所有按钮元素上的 onclick 事件,如下所示:

function setBorder(myobj) {     
            myobj.style.borderStyle = "inset";
        }  
var menubtn = document.getElementById("menu_btn");
menubtn.onactive = setBorder(menubtn);

这里的问题是,一旦页面加载,边框样式就会改变,因为解析 javascript 时,由于括号 (),函数 setBorder() 被执行>。我认为的另一种选择是:

function setBorder() {      
            this.style.borderStyle = "inset";
        }  
var menubtn = document.getElementById("menu_btn");
menubtn.onactive = setBorder;

我以为 this 会获取对象 menubtn ——但这并没有发生。为什么this没有采用对象menubtn

我认为可能有一种方法可以将 setBorder 链接为所有按钮元素的原型(prototype)对象。原型(prototype)对象将具有函数 func_SetBorder 作为其属性。然后我们可以将 func_setBorder 调用为:

menubtn.onclick = menubtn.func_setborder;

最佳答案

此解决方案通过使用 function closure 实现您正在寻找的目标.

var buttons = [ ... ];   // An array containing the buttons

for (let b of buttons) {
  b.onactive = onActive(b);
}

function onActive(button) {
  return function () {
    button.style.borderStyle = 'inset';
  }
}

关于javascript - 如何在javascript中为函数分配参数而不执行它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37019564/

相关文章:

javascript - 动态更新 src 时 videojs youtube 插件 MEDIA_ERR_SRC_NOT_SUPPORTED

javascript - 当 chrome 要求我翻译页面时,避免调整 Jquery 事件的大小

javascript - Node Js 路由不起作用

javascript - Service Worker 根据屏幕分辨率缓存不同大小的图像

javascript - Twitter Bootstrap Modal 是黑暗的吗?

php - jQuery .load() 停止使用 POST 参数

javascript - Google App Script Web App GET 和 POST 请求被 CORS 策略阻止

javascript - (Ajax)登陆页面网址而不重新加载内容

php - 如何对具有软件版本号的表中的列进行排序?

javascript - 如何更改:blank on window.打开