在我的 html 中找不到按钮
2018-03-07
1023
我正在用 javascript 练习 MVC,并尝试将控制器中的事件处理程序附加到按钮。首先,我创建视图,并在其构造函数中加载外部 HTML。然后,在控制器构造函数中,我尝试执行
find("#myButton")
以找到我的按钮,然后将事件侦听器附加到它。以下是我的尝试:
index.html:
<div id="welcome"></div>
js/app.js:
var welcome = $("#welcome");
var welcomeView = new WelcomeView(welcome, model);
var welcomeController = new WelcomeController(welcome, model, generalController);
js/view/welcomeView.js:
var WelcomeView = function(container, model){
var container = container;
var model = model;
container.load("welcome.html");
this.show = function(){
container.style.display = "block";
}
this.hide = function(){
container.style.display = "none";
}
}
welcome.html:
<button type="button" class="btn btn-default" id="myButton">Create new dinner</button>
js/controllers/welcomeController.js:
var WelcomeController = function(container, model, generalController){
var container = container;
var model = model;
var createButton = container.find("#myButton");
createButton.click( function() {
alert("entered");
generalController.showScreen("DISHSEARCH");
} );
}
单击按钮时,什么也没有发生。当我尝试在控制器中不使用 jQuery 时:
createButton[0].onclick = function(){
alert("hello");
};
我收到错误:
welcomeController.js:7 Uncaught TypeError: Cannot set property 'onclick' of undefined
at new WelcomeController (welcomeController.js:7)
at HTMLDocument.<anonymous> (app.js:30)
at fire (jquery.js:3119)
at Object.fireWith [as resolveWith] (jquery.js:3231)
at Function.ready (jquery.js:3443)
at HTMLDocument.completed (jquery.js:3474)
因此,查找按钮元素似乎存在一些问题,但我无法弄清楚!这里出了什么问题?
2个回答
@skobaljic 有正确的解决方案。使用
.on()
解决了该问题:
js/controllers/welcomeController.js:
container.on('click', "#myButton", function() {
alert("Success!");
generalController.showScreen("DISHSEARCH");
})
Sahand
2018-03-07
使用您的welcome.html和index.html中的welcome div,这工作得很好: (加载函数有一个回调来通知您加载已完成)。正如其他人提到的;这是一个异步任务。
$(function() {
$("#welcome").load("welcome.html", function() {
$('#myButton',this).on("click",function() {
alert("clicked");
});
});
});
也可以同步加载,
$.ajax({async:false,...
或这个 vanilla :
var request = new XMLHttpRequest();
request.open('GET', 'welcome.html', false); // `false` makes the request synchronous
request.send(null);
if (request.status === 200) {
console.log(request.responseText);
}
nullqube
2018-03-07