2011-01-18 3 views
1

У меня есть этот HTML код:Получение значения текстовых полей в Javascript

<table border="" cellpadding="3" cellspacing="0" id="mytable"> 

<tbody><tr><td>Song:</td> <td><input type="text" name="song" maxlength="64" size="48" /> </td></tr> 
<tr><td>Artist:</td> <td><input type="text" name="artist" maxlength="16" size="48" /> </td></tr> 

Как получить значение «песни» и «художник»? Я пробовал:

var elTableCells = mytable.getElementsByTagName("td"); 
alert(elTableCells[2].value); 
alert(elTableCells[4].value); 

, но я получаю «неопределенные», даже если есть текст внутри текстового поля

ответ

4

Во-первых, td элементы не имеют атрибута value, поэтому на них .value не будет ничего делать. Во-вторых, значение действительно находится на элементе input, поэтому вам нужно сделать mytable.getElementsByTagName('input'). Еще лучше было бы указать идентификаторы полей ввода, а затем использовать getElementById. Это означало бы, что вы можете изменить свой HTML без нарушения JS.

1

Скачать jquery

jQuery("input[name='song']").val() 

Чтобы попытаться разрешить спор ниже. Это может быть опущено с помощью простого javascript, как указано выше, но для простоты и перекрестной стандартизации браузера я бы порекомендовал jQuery. Это широко используемая и обычно рекомендуемая библиотека.

+7

JQuery не является ответом на каждый вопрос Javascript. – lonesomeday

+0

простой альтернативе '$ («вход [имя = „песня“]»). вал()' – Dutchie432

+0

... особенно, когда OP уже используется обычный JavaScript – casablanca

1
var song = document.getElementsByName("song").value; 
var artist = document.getElementsByName("artist").value; 
+1

'getElementsByName' возвращает DOMNo делистинг. Вам нужно использовать 'document.getElementsByName (« song ») [0] .value'. – lonesomeday

+0

http: // jsfiddle.net/jdYZ3/code in action – generalhenry

+0

Обратите внимание, что этот метод ведет себя по-разному в [FF] (https://developer.mozilla.org/en/DOM/document.getElementsByName) и [IE] (http://msdn.microsoft .com/EN-US/библиотека/ms536438 (v = vs.85) .aspx). В IE также возвращаются элементы с идентификатором соответствия, но не элементы, которые имеют атрибут 'name', но официально не поддерживают его. В то время как в FF возвращаются только элементы с соответствующими «именами», независимо от того, официально ли они это поддерживают. См. Также: http://www.quirksmode.org/dom/w3c_core.html#t125 –

1

Идентификатор тега, который здесь имеет значение «вход», а не td. Это даст вам то, что вы ищете.

Это почти клише на StackOverflow, но я предлагаю вам взглянуть на JQuery. JQuery позволяет обрабатывать ваш html как базу данных и запрашивать его для получения такого рода материалов. Если разметка было так:

<input type="text" id="song" maxlength="64" size="48" /> 

Вы можете получить значение, как это:

$("#id").value(); 

Если вы хотите получить значение атрибута MAXLENGTH на нем, вы можете сделать это:

$("#id").attr("maxlength"); 

Гораздо интереснее, чем копать элементы массивов.

0
alert(document.getElementsByName("song")[0].value); 
alert(document.getElementsByName("artist")[0].value); 
0

Я нахожу это для эффективной работы. Ниже я получаю дату из текстового поля asp.net, а затем получаю сегодняшнюю дату. Затем я отправляю обе даты через функцию, чтобы получить количество месяцев, которые мне нужны для выполнения моих вычислений (имейте в виду, что код использует библиотеки Infragistics (если вы намерены копировать и вставлять, заменять эти вызовы стандартными вызовами JavaScript):

function calculateMonthlyRepayment() 

    var tStartDate = $find('dp_Start_Date'); 
    var startDate = tStartDate.get_value(); 
    var today = new Date(); 
    var numMonths = monthDiff(startDate, today);  
    var rate = igedit_getById('WebNumericEdit_InterestRate').getValue() * 0.01; 
    var intRate = (rate/100)/12; 
    var principal = igedit_getById('WebCurrencyEdit_Proposed_Owing').getValue(); 
    var repayment = (principal * (Math.pow((1 + intRate), numMonths)) * intRate/(Math.pow((1 + intRate), numMonths) - 1)); 

    igedit_getById('txt_Monthly_Repayment').setValue(repayment); 

} 
function monthDiff(d1, d2) { 
    var months; 
    months = (d2.getFullYear() - d1.getFullYear()) * 12; 
    months -= d1.getMonth() + 1; 
    months += d2.getMonth(); 
    return months <= 0 ? 0 : months; 
}