2014-08-27 8 views
0

Я пробовал различные вещи, найденные здесь на SO, но я не могу заставить это работать. Ниже приведен весь тестовый документ HTML. Я загружая его на следующий адрес:Невозможно присвоить значение с помощью javascript

file:///Users/aaronbratcher/Documents/Tester.html?Donor.firstName=John&Donor.lastNameBusiness=Smith

Что я ожидаю это для 2 текстовых полей, которые будут заселены в JavaScript с значениями, передаваемыми по URL, однако они не заселены , В сообщениях журнала указано, что все найдено, как ожидалось. Об ошибках и предупреждениях не сообщалось.

Что я делаю неправильно?

Спасибо.

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
     <title>Accept Donation</title> 
     <meta name="apple-mobile-web-app-capable" content="yes"> 
     <meta name = "viewport" content = "width = 320, initial-scale = 1, user-scalable = no"> 
    </head> 

    <body> 
    <form name="AcceptDonation" action="http://localhost" onsubmit="return review()" method="get"> 
     <H2>Donor Name</H2> 
     <div class="table-field"> 
      <input type="text" class = "textField fullWidth" name = "Donor.firstName" id="firstName" autocorrect="off" placeholder="First Name"> 
     </div> 
     <div class="table-field bottom"> 
      <input type="text" class="textField fullWidth" name = "Donor.lastNameBusiness" id="lastName" autocorrect="off" placeholder="Last Name"> 
     </div> 
     </form> 

     <script type='text/javascript'> 
     var urlParameters = {} 
     var kMinReceiptRequiredAmount = 250 

     window.onload = function() { 
      loadParameters() 
     } 

     function loadParameters() { 
      var url = window.location.search.substring(1) 
      var parts = url.split("&") 
      for (var i=0; i < parts.length; i++) { 
       var parameter = parts[i] 
       var parameterParts = parameter.split("=") 
       var parameterKey = decodeURI(parameterParts[0]) 
       var parameterValue = decodeURI(parameterParts[1]) 

       var docObject = document.getElementsByName(parameterKey) 
       console.log(docObject) 
       console.log(parameterValue) 
       if (docObject) { 
        docObject.value = parameterValue 
       } 
      }   
     } 
     </script> 
    </body> 
</html> 
+0

Вы даже регистрируете 'docObject', проблема может быть четко видна в консоли. – Teemu

+1

только очевидно, если вы понимаете, что скобки указывают массив объектов: P –

ответ

0

.getElementsByName() функция возвращает список элементов, даже если есть только один на странице, которая соответствует.

if (docObject && docObject.length) 
    docObject[0].value = parameterValue; 

Вы не действительно нужно проверить, является ли непустой возвращаемое значение, потому что .getElementsByName() всегда возвращает NodeList.

if (docObject.length) 
    docObject[0].value = parameterValue; 
0

Вы используете getElementsByName, которая возвращает nodeList. Поэтому, когда вы устанавливаете значение элемента текстового поля, вам нужно получить к нему доступ из списка, аналогичного тому, как вы бы это сделали, если бы он был в массиве.

var docObject = document.getElementsByName(parameterKey) 
console.log(docObject) 
console.log(parameterValue) 
if (docObject.length) { 
    docObject[0].value = parameterValue 
} 

Если возможно, я бы изменить его так, что вы отрываясь элемент по id, а не name. Использование getElementsByName полезно, если имеется несколько полей с этим именем. Использование getElementById полезно, если есть только одно поле с этим идентификатором, и тогда вам не нужно беспокоиться о работе с nodeList

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