Передача данных на новую страницу и ее запись

Я пытаюсь передать данные из текстовых полей с помощью GetElementById.

это мое текстовое поле:

<tr>
<td>Your name:</td>
<td> <input type="text" name="name" id = "p_name"/><br /></td>

</tr>

И это мои функции:

function mypopup()
{
     mywindow = window.open("Page_preview.html","width=200,height=200");
     mywindow.moveTo(0, 0);

}
function load()
{
    document.write("<p>" + Date() + "</p>");

    var myTextField = document.getElementById('p_name');
     if(myTextField.value != "")
     alert("You entered: " + myTextField.value)
}

Метод загрузки вызывается внутри тела page_preview.html.

Это кнопка, которая запускает функцию mypopup:

<input type="button" onclick="mypopup()" value="Show preview" />

Все работает, за исключением того, что document.getElementById('p_name') никогда не возвращает значение, как будто не может его найти.

Я уверен, что это можно сделать легко (я новичок в этом).


person Michael A    schedule 06.02.2012    source источник
comment
document.getElementById() получит элемент в текущем документе, то есть не будет искать его в других окнах. Одним из способов передачи данных из одного окна в другое является использование .getElementById() в вашей функции mypopup() и передача значения в Page_preview.html в строке запроса, т. е. при открытии второго окна установите URL-адрес "Page_preview.html?name=" + encodeURIComponent(document.getElementById("p_name").value).   -  person nnnnnn    schedule 06.02.2012


Ответы (4)


Если ваша форма имеет name, а текстовое поле имеет name, вы можете использовать document.myForm.myTextbox.value.

<form name='myForm'>
    <input type='text' name='myTextbox'>

Кроме того, убедитесь, что ваша страница действительно полностью загружена, прежде чем выполнять действия в DOM - если ваш page_preview.html запускает javascript ДО загрузки текстового поля, это приведет к тому, что он всегда будет nil.

person Tim    schedule 06.02.2012

почему бы вам не повысить ценность вашего события onclick? Я имею в виду передать параметры вашей функции. что-то вроде этого

<input type="button" onclick="mypopup(document.getElementById('p_name').value)" value="Show preview" />

В вашей функции javascript это будет так

function load(p_name)
{
  document.write("<p>" + Date() + "</p>");

  var myTextField = p_name;
  if(myTextField.value != "")
  alert("You entered: " + myTextField.value)
}

Или, может быть, ошибка в вашем getElementById. Пожалуйста, добавьте .value в эту часть:

 var myTextField = document.getElementById('p_name');

Сделайте это так:

 var myTextField = document.getElementById('p_name').value;

Думаю это исправит. Надеюсь, это поможет.

person user1149244    schedule 06.02.2012

document.write перезаписывает html на вашей странице, поэтому после выполнения этой строки <input type="text" name="name" id = "p_name"/> больше не существует. Вместо этого попробуйте изменить содержимое div (или span, или p и т. д.) для вывода.

Пример HTML:

<div id="messages"></div>

Пример JS:

var outputElement = document.getElementById;
var msgs = 'This is a better way to monitor output';
var htmlMsgs = '<p>This is a better way to monitor output</p>';
outputElement.innerText = msgs;
//outputElement.innerHTML = htmlMsgs; //for formatted output.
person pete    schedule 06.02.2012

Попробуйте использовать jQuery

$('#p_name').val()
person Spec    schedule 06.02.2012