2010-06-10 4 views
0

Попробуйте запустить код, я знаю, проблема в 1. части. Заранее спасибо,Javascript - неопределенное значение cookie?

P.S. Я новичок в JS.

<html> 
<head> 
<script> 
{ 
    //1. dio 

    var Cookies = new Array(); 

    function createCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toGMTString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
    } 

    function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
    } 

    function eraseCookie(name) { 
     createCookie(name,"",-1); 
    } 

    //2. dio 

    function saveIt(name) { 
     var Cookies = new Array(); 
     var x = document.forms['forma'].cookievalue.value; 
     if (!x) 
      alert('Please fill in a value in the input box.'); 
     else { 
      Cookies.create(name,x,7); 
      alert('Cookie created'); 
     } 
    } 

    function readIt(name) { 
     alert('The value of the cookie is ' + Cookies[name]); 
    } 

    function eraseIt(name) { 
     Cookies.erase(name); 
     alert('Cookie erased'); 
    } 

    function init() { 
     for (var i=1;i<3;i++) { 
      var x = Cookies['ppkcookie' + i]; 
      if (x) alert('Cookie ppkcookie' + i + '\nthat you set on a previous visit, is still active.\nIts value is ' + x); 
     } 
    } 
} 
</script> 
</head> 
<body> 
<form name = "forma"> 
    <input type = "text" name = "cookievalue"> 
    <input type = "button" value = "Spremi" onClick = "saveIt('ppkcookie1')"> 
    <input type = "button" value = "Ispisi" onClick = "readIt('ppkcookie1')"> 
</form> 
</body> 
</html> 
+0

Это трудно «запустить код», потому что вы не предоставили ту часть, которая на самом деле * звонки * любой из функций, и вы не поставить HTML для форма. – Pointy

+0

Я сделал, это просто не показалось, извините, здесь, я его обновлю. – Computeras

+0

Обратите внимание, что '' исчез во время редактирования. Возможно, вы захотите вернуть его, чтобы избежать красных сельдей. Вы также можете захотеть копировать «не откладывайте», чтобы проверить, все ли в порядке. JS ожидает форму с именем 'cookieform', но в HTML нет ни одного ... – BalusC

ответ

0

Look here

Cookies.create, кажется, не быть функцией

+0

Cookies - это массив, и createCookie - это функция, я попытался изменить ее на Cookies.createCookie, но ничего не сделал? – Computeras

+0

@Computeras - это не то, как работает JS. С одной стороны, у вас есть функция FooBar, и вы вызываете функцию Foo (другое имя = другой объект здесь) для другого, вам нужно назначить функцию объекту для использования точечной нотации ('Cookies.create = createCookie; 'будет делать здесь), и, наконец, ваша функция saveIt создает новую переменную в области с тем же именем, которая никогда не будет работать. Я настоятельно рекомендую вам использовать копию существующего кода манипуляции с файлами cookie (азатот так же хорош, как и любой другой, и используйте это, чтобы помочь вам узнать больше о JS). – annakata

+0

Я не знаю достаточно JS в любом случае, поэтому я могу только частично понять, что вы только что сказали. Так что неважно. Если мне когда-нибудь понадобится код для файлов cookie, я буду использовать существующий код, как вы сказали. Спасибо за все усилия – Computeras

0

После кода я уже припрятано в morebits.js; возможно, вы можете использовать его сразу:

Cookies = { 
    /* 
    * Creates an cookie with the name and value pair. expiry is optional or null and defaults 
    * to browser standard (in seconds), path is optional and defaults to "/" 
    * throws error if the cookie already exists. 
    */ 
    create: function(name, value, max_age, path) { 
     if(Cookies.exists(name)) { 
      throw "cookie " + name + " already exists"; 
     } 
     Cookies.set(name, value, max_age, path); 
    }, 
    /* 
    * Sets an cookie with the name and value pair, overwrites any previous cookie of that name. 
    * expiry is optional or null and defaults to browser standard (in seconds), 
    * path is optional and defaults to/
    */ 
    set: function(name, value, max_age, path) { 
     var cookie = name + "=" + encodeURIComponent(value); 
     if(max_age) { 
      cookie += "; max-age=" + max_age; 
     } 
     cookie += "; path=" + path || "/"; 
     document.cookie = cookie; 
    }, 
    /* 
    * Retuns the cookie with the name "name", return null if no cookie found. 
    */ 
    read: function(name) { 
     var cookies = document.cookie.split(";"); 
     for(var i = 0; i < cookies.length; ++i) { 
      var current = cookies[i]; 
      current = current.trim(); 
      if(current.indexOf(name + "=") == 0) { 
       return decodeURIComponent(current.substring(name.length + 1)); 
      } 
     } 
     return null; 
    }, 
    /* 
    * Returns true if a cookie exists, false otherwise 
    */ 
    exists: function(name) { 
     var re = new RegExp(";\\s*" + name + "="); 
     return re.test(document.cookie); 
    }, 
    /* 
    * Deletes the cookie named "name" 
    */ 
    remove: function(name) { 
     Cookies.set(name, '', -1); 
    } 
} 
Смежные вопросы