奇怪的行为 - getElementById()
Strange behavior - getElementById()
我目前正在做一些简单的事情 - 一个 JavaScript 脚本,如果字符串是电子邮件,它会进行一些最低限度的验证。
但是出现问题,我似乎无法理解。
我有一个输入文本字段,用户可以在其中输入一封电子邮件,一个按钮,单击该按钮时,会从输入中获取字符串并将其显示在具有绿色背景的 div 中,如果有效,或红色的 - 如果无效。
所以,我创建了一个函数 get(),它简单地执行 return 具有给定 id 的 DOM 元素。没什么特别的,但奇怪的事情接踵而至。
当我尝试使用一个元素时,我从 DOM 'got' 中将其与回调函数中的此函数一起使用,我根本做不到。但是当我在回调函数中用 document.getElementById('status') 手动获取它时,它起作用了。
我不明白问题出在哪里。
这是我的 Html:
<section>
<input type="text" name="email" placeholder="Enter an email" id="input" />
<input type="submit" value="Validate →" id="submit" />
<div class="status" id="status"></div>
</section>
这里是 JS:
var get = function(id) {
return document.getElementById(id);
};
var input = get('input'),
status = get('status'),
btn = get('submit');
btn.addEventListener('click', function(){
// doesn't work
status.innerHTML = 'Checking...';
// works?!
// Puts 'Checking' text in div#status
document.getElementById('status').innerHTML = 'Checking...';
});
名称为 status
的全局变量不会采用非字符串值,这是一个有点讨厌的问题...如果您尝试分配一个值,那么它将采用该对象的 toString() 值(已在 chrome 中测试)。
在您的控制台中,如果您记录 status
的值,您应该得到 [object HTMLDivElement]
,这是 Element
对象的 toString() 实现。
只要重命名变量就可以了
var get = function(id) {
return document.getElementById(id);
};
var input = get('input'),
status1 = get('status'),
btn = get('submit');
btn.addEventListener('click', function(){
// doesn't work
status.innerHTML = 'Checking...';
// works?!
// Puts 'Checking' text in div#status
document.getElementById('status').innerHTML = 'Checking...';
});
其他关键 window 属性也是如此,例如 name
你应该把这个代码
window.onload = function() {
var input = get('input'),
status = get('status'),
btn = get('submit');
btn.addEventListener('click', function(){
// doesn't work
status.innerHTML = 'Checking...';
// works?!
// Puts 'Checking' text in div#status
document.getElementById('status').innerHTML = 'Checking...';
});
};
应该可以。
我目前正在做一些简单的事情 - 一个 JavaScript 脚本,如果字符串是电子邮件,它会进行一些最低限度的验证。
但是出现问题,我似乎无法理解。
我有一个输入文本字段,用户可以在其中输入一封电子邮件,一个按钮,单击该按钮时,会从输入中获取字符串并将其显示在具有绿色背景的 div 中,如果有效,或红色的 - 如果无效。
所以,我创建了一个函数 get(),它简单地执行 return 具有给定 id 的 DOM 元素。没什么特别的,但奇怪的事情接踵而至。
当我尝试使用一个元素时,我从 DOM 'got' 中将其与回调函数中的此函数一起使用,我根本做不到。但是当我在回调函数中用 document.getElementById('status') 手动获取它时,它起作用了。
我不明白问题出在哪里。
这是我的 Html:
<section>
<input type="text" name="email" placeholder="Enter an email" id="input" />
<input type="submit" value="Validate →" id="submit" />
<div class="status" id="status"></div>
</section>
这里是 JS:
var get = function(id) {
return document.getElementById(id);
};
var input = get('input'),
status = get('status'),
btn = get('submit');
btn.addEventListener('click', function(){
// doesn't work
status.innerHTML = 'Checking...';
// works?!
// Puts 'Checking' text in div#status
document.getElementById('status').innerHTML = 'Checking...';
});
名称为 status
的全局变量不会采用非字符串值,这是一个有点讨厌的问题...如果您尝试分配一个值,那么它将采用该对象的 toString() 值(已在 chrome 中测试)。
在您的控制台中,如果您记录 status
的值,您应该得到 [object HTMLDivElement]
,这是 Element
对象的 toString() 实现。
只要重命名变量就可以了
var get = function(id) {
return document.getElementById(id);
};
var input = get('input'),
status1 = get('status'),
btn = get('submit');
btn.addEventListener('click', function(){
// doesn't work
status.innerHTML = 'Checking...';
// works?!
// Puts 'Checking' text in div#status
document.getElementById('status').innerHTML = 'Checking...';
});
其他关键 window 属性也是如此,例如 name
你应该把这个代码
window.onload = function() {
var input = get('input'),
status = get('status'),
btn = get('submit');
btn.addEventListener('click', function(){
// doesn't work
status.innerHTML = 'Checking...';
// works?!
// Puts 'Checking' text in div#status
document.getElementById('status').innerHTML = 'Checking...';
});
};
应该可以。