javascript - 将文档对象传递给函数

标签 javascript

我有一个按照模块模式编写的 JavaScript 代码:

var controller = function () {

    return {
        init: function() {
            // settings and initialization    
        }

        makeUIactions: function() { 
             //set UI actions, for example callback function of a button:
            document.getElementById("ShuffleButton").addEventListener("click", Shuffle);
            function Shuffle(){};
        }
    }
}

如何将文档对象传递给 makeUIactions?

P/S:我收到以下错误:

Cannot read property 'addEventListener' of null

是因为我无法从 makeUIactions 访问文档吗?

HTML:

<script>
    controller.init();
    controller.makeUIactions();
</script>

<div>
    <input type="button" id="ShuffleButton" style="margin-top:20px" value="Shuffle" data-inline="true">

    <input type="button" id="SubmitButton" style="margin-top:20px" value="Submit" data-inline="true">
</div>

最佳答案

您的代码在 DOM 加载之前运行,document.getElementById("ShuffleButton")找不到 DOM 元素,因此返回 null 。当您尝试null.addEventListener()时,它会抛出您看到的错误。

您可以通过移动以下内容来修复它:

<script>
    controller.init();
    controller.makeUIactions();
</script>

就在您的 </body> 之前标签,以便 DOM 元素在脚本运行之前就位。请参阅此答案 pure JavaScript equivalent to jQuery's $.ready() how to call a function when the page/dom is ready for it了解更多详细信息。

关于javascript - 将文档对象传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28935580/

相关文章:

javascript - JQuery:图像无法在图像标签中绑定(bind)

javascript - Protovis 与 D3.js

javascript - 从带有滚动条的 div 拖放 - overflow-y 滚动 VS overflow-x 可见

javascript - Node.js测试如何使用独享的Redis数据?

javascript - Bootstrap datetimepicker CSS 问题

javascript - 在 AngularJS 中,如何在我的开发环境中用非缩小文件替换缩小的 javascript 文件?

javascript - 从按钮客户端单击上的验证控件触发 onclientclick 和客户端验证

javascript - 给jquery一个来自ZK计时器(或标签)的值

javascript - JS即时输出到HTML

javascript - HTML Bootstrap 表单 : how to add spacing between elements, 增加文本区域的大小?