getElementsByName('q')[0]返回undefined

dar*_*021 1 html javascript

我正在尝试在聚焦时让文本框放大

相关的HTML代码是

<input class="tbox" name="q" type="text" />
Run Code Online (Sandbox Code Playgroud)

由于tbox是页面中每个文本框的标记,我必须使用该名称.

我试过这个javascript

window.onload = init();
function init()
{
    var arr = new Array();
    arr = document.getElementsByName("q");
    var querybox = arr[0];
    querybox.addEventListener('onfocus', wasclicked, false);
    querybox.addEventListener('onblur', lostfocus, false);
}

function wasclicked(form)
{
    form.q.style['width'] = '500px';
}
    function lostfocus(form)
{
    form.q.style['width'] = '276px';
}
Run Code Online (Sandbox Code Playgroud)

调试控制台告诉我,我不能在未定义的上使用addEventListener.

我不熟悉javascript,所以我尝试[0] .value也无济于事.

jfr*_*d00 6

有几个不同的问题.首先,您需要使用:

window.onload = init;   // assign function reference to .onload to call later
Run Code Online (Sandbox Code Playgroud)

代替:

window.onload = init();   // calls init() immediately and assigns return value to .onload
Run Code Online (Sandbox Code Playgroud)

这是一个非常常见的JS错误.您拥有它的方式,您正在init()立即调用(在页面加载之前)并将其返回值指定为window.onload无效.

您想要为其分配函数引用window.onload.函数引用是函数的名称,后面没有任何parens.添加parens指示JS解释器现在执行函数.仅指定名称会将指向函数的指针放入其中,window.onload以便稍后在onload事件触发时调用它.


您还必须修复事件处理程序回调,因为form它不是传递给它们的内容.事件处理程序的参数是Event对象.导致该事件的对象将在thisevent.target:

function wasclicked(e) {
    this.style.width = '500px';
}

function lostfocus(e) {
    this.style.width = '276px';
}
Run Code Online (Sandbox Code Playgroud)

而且,事件名称是"模糊"和"焦点",所以你需要改变这个:

querybox.addEventListener('onfocus', wasclicked, false);
querybox.addEventListener('onblur', lostfocus, flase);
Run Code Online (Sandbox Code Playgroud)

对此:

querybox.addEventListener('focus', wasclicked, false);
querybox.addEventListener('blur', lostfocus, flase);
Run Code Online (Sandbox Code Playgroud)

结合所有内容并进行一些简化,整个过程应如下所示:

window.onload = init;

function init() {
    var querybox = document.getElementsByName("q")[0];
    querybox.addEventListener('focus', wasclicked, false);
    querybox.addEventListener('blur', lostfocus, false);
}

function wasclicked(e) {
    this.style.width = '500px';
}

function lostfocus(e) {
    this.style.width = '276px';
}
Run Code Online (Sandbox Code Playgroud)