0

编辑感谢大家!

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

但是它不起作用,我找不到问题。我什至做了一个测试 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

4 回答 4

1

第一步应该是确保checkCookie返回的正是你想要的。如果它是空的,它显然会产生与什么都不做一样的效果,因为它会在 textarea 中放置一个空值。

cookie假设它包含正确格式的值,您应该对这一行没问题:

document.getElementById("fname").value = cookie;
于 2013-05-17T01:21:11.603 回答
0

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

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

 window.onload = checkCookie;

这将checkCookie仅在加载窗口内容时执行该函数。这不是最有效的方法,但由于我不知道您使用的是哪种浏览器,所以这是最可靠的测试方法。

编辑:查看您的代码后,问题是这一行:

window.onload = checkCookie();

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

看看我之前的例子,看看应该怎么做。

于 2013-05-17T00:58:11.700 回答
0

我认为在 JS 中,每个语句都以;分号结尾

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

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

于 2013-05-17T00:58:50.100 回答
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 加载后才尝试访问它。

这是一个如何做到这一点的例子。

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 上

看:

窗口.onload

笔记

load 事件在文档加载过程结束时触发。至此,文档中的所有对象都在 DOM 中,所有图片和子帧都加载完毕。

EventTarget.addEventListener

概括

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

为什么在 HTML 中使用 onClick() 是一种不好的做法?

不显眼的 JavaScript

于 2013-05-17T02:11:40.523 回答