2013-05-17 6 views
0

EDIT спасибо всем!javaScript не позволит мне писать текстовое поле

У меня есть файл 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

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

не работает

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

не работает

Ничего не работает. Это не позволит мне изменить элемент внутри этой функции. Если я попытаюсь поместить код (т.е. document.etcetc.innerHTML = "hi") в другую функцию, тогда он отлично работает ... однако он не будет работать, как показано выше. Это сводит меня с ума.

Любые идеи?

+3

вы видите 'alert' ли? –

+1

Используйте консоль. – iambriansreed

+1

можете ли вы опубликовать все соответствующие коды? мы не знаем, что внутри 'getCookie' и' isName' –

ответ

0

Я подозреваю, что когда функция checkCookie выполняется, DOM еще не готов, и ваш вход не существует.

Чтобы убедиться, что это не так, попробуйте следующее:

window.onload = checkCookie; 

Это будет выполнять функцию checkCookie только тогда, когда содержимое окна было загружено. Это не самый эффективный способ сделать это, но поскольку я не знаю, какой браузер вы используете, это был самый надежный способ тестирования.

EDIT: После того, как взглянуть на your code, проблема эта линия:

window.onload = checkCookie();

Это будет выполнять функцию checkCookie сразу и попытаться присвоить результат работы функции на window.onload.

Завершите мой предыдущий пример, чтобы узнать, как это сделать.

+0

вот как он работает уже – Ghozt

+0

@Ghozt, я обновил свой ответ. Вы увидите, что это не совсем то, что вы делали ...;) – plalx

+0

У меня это работало, проблема была в window.onload – Ghozt

0

Я думаю, что в JS, каждый оператор заканчивается ; запятой

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

Я думаю, вы должны добавить ; в конце

+2

Хотя это хорошая практика, чтобы положить полуточку в конце каждой инструкции, JS, как правило, выяснит, как правильно ее интерпретировать, даже если ее нет. Это относится к вводящему в заблуждение коду, но, вероятно, не главная проблема здесь. –

+0

все еще не работает – Ghozt

1

Первого шаг должен быть, чтобы убедиться, что checkCookie возвращается именно то, что вам хотеть. Если он пуст, он, очевидно, будет иметь такой же эффект, как если бы он ничего не делал, потому что он поместил пустое значение в текстовое поле.

Вы должны быть хорошо с этой линией, при условии, что cookie содержит правильно отформатированный значение:

document.getElementById("fname").value = cookie; 
+0

checkCookie возвращает правильное значение (у меня есть предупреждение) – Ghozt

+0

Когда вы пытаетесь присвоить значение текстовой области, еще готов документ? Если нет, вы присваиваете значение неопределенному элементу. Попробуйте это на событии 'window.onload' –

+0

http://pastebin.com/t4tWdjnp вот мой код – Ghozt

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

См:

window.onload

Notes

The load event fires at the end of the document loading process. At this point, all of the objects in the document are in the DOM, and all the images and sub-frames have finished loading.

EventTarget.addEventListener

Summary

addEventListener() registers a single event listener on a single target. The event target may be a single element in a document, the document itself, a window, or an XMLHttpRequest.

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

Unobtrusive JavaScript

+0

это почти такой же, как мой код. http://pastebin.com/t4tWdjnp – Ghozt

+0

Я просто возился с разными именами переменных, как вы можете видеть в psatebin – Ghozt

+0

Я попробую прослушиватель событий и посмотрю, что произойдет – Ghozt

Смежные вопросы