javaScript不会让我写入文本框值

时间:2013-05-17 00:53:08

标签: javascript dom event-handling onload onkeyup

编辑感谢所有人!

我在页面上有一个cookie,当页面加载时我想将cookie中的值放入输入框作为其defualt值。

然而它不起作用,我找不到问题。我甚至做了一个测试div并试图改变它,但它不会工作。

function checkCookie() {
    var cookieName = getCookie("username");

    if (cookieName != null && cookieName != "") {
        alert(cookieName);
        document.getElementById("fname").value = cookieName
    } else {
        alert("else");
        return;
    }
}

这是html

<input type="text" name="fname" id="fname" onKeyUp="isName(this.value)">

我也尝试了这个代码(我刚做了一个叫做tester2的div

document.getElementById("fname").value = "hello" 

不起作用

document.getElementById("tester2").innerHTML = cookieName

不起作用

没有任何作用。它不会让我更改此函数中的元素。如果我尝试将代码(即document.etcetc.innerHTML =“hi”)放在另一个函数中,那么它可以完美地工作......但是它不会像上面所示那样运行。它让我疯狂。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

第一步应该是确保checkCookie完全返回您想要的内容。如果它是空的,它显然具有相同的效果,就好像它没有做任何事情,因为它会在textarea中放入一个空值。

假设cookie包含格式正确的值:

,您应该对此行没问题
document.getElementById("fname").value = cookie;

答案 1 :(得分:0)

我怀疑当checkCookie函数执行时,DOM还没有准备好,你的输入也不存在。

要确保不是这种情况,请尝试以下操作:

 window.onload = checkCookie;

仅在加载窗口内容时执行checkCookie功能。这不是最有效的方法,但由于我不知道您使用的是哪种浏览器,因此它是最可靠的测试方式。

编辑:看了your code后,问题出在这一行:

window.onload = checkCookie();

这将立即执行checkCookie函数并尝试将函数的结果赋给window.onload

检查我之前的示例,看看应该如何完成。

答案 2 :(得分:0)

我认为在JS中,每个语句都以;半结肠

结尾
document.getElementById("fname").value = cookieName

我认为你应该在最后添加;

答案 3 :(得分:0)

这是一个例子

HTML

<input type="text" name="fname" id="fname">

的Javascript

function getCookie(something) {
    var cookies = {
        "username": "John Smith"
    }

    return cookies[something];
}

function checkCookie() {
    var cookieName = getCookie("username");

    if (cookieName != null && cookieName != "") {
        alert(cookieName);
        this.value = cookieName;
    } else {
        alert("else");
    }
}

var fname = document.getElementById("fname");

fname.addEventListener("keyup", checkCookie, false);

jsfiddle

因此,基于您的评论,您可能在尝试访问DOM之前没有等待DOM加载。

以下是如何执行此操作的示例。

window.addEventListener("load", function onLoad() {
    this.removeEventListener("load", onLoad);

    function getCookie(something) {
        var cookies = {
            "username": "John Smith"
        }

        return cookies[something];
    }

    function checkCookie() {
        var cookieName = getCookie("username");

        if (cookieName != null && cookieName != "") {
            alert(cookieName);
            this.value = cookieName;
        } else {
            alert("else");
        }
    }

    var fname = document.getElementById("fname");

    fname.addEventListener("keyup", checkCookie, false);
}, false);

jsfiddle

请参阅:

window.onload

  

注释

     

加载事件在文档加载过程结束时触发。在   至此,文档中的所有对象都在DOM中,而且都是   图像和子帧已完成加载。

EventTarget.addEventListener

  

摘要

     

addEventListener()在单个事件上注册单个事件侦听器   目标。事件目标可以是文档中的单个元素,   文档本身,窗口或XMLHttpRequest。

Why is using onClick() in HTML a bad practice?

Unobtrusive JavaScript