2013-04-26 5 views
3

Я просматриваю книгу, и это кажется правильным, но следующий код продолжает давать мне ошибку: нельзя установить свойство nodeValue null. Код имеет смысл для меня, но я не понимаю, почему он не может очистить текстовое значение при нажатии кнопки очистки.Невозможно установить свойство «nodeValue» из null

var clear = function(){ 

     $("miles").firstChild.nodeValue = ""; 
     $("gallons").firstChild.nodeValue = ""; 
     $("mpg").firstChild.nodeValue = ""; 
     } 

    window.onload = function() { 
     $("calculate").onclick = calculateMpg; 
     $("miles").focus(); 
     $("clear").onclick = clear; 
    } 

Html

<section> 
    <h1>Calculate Miles Per Gallon</h1> 
    <label for="miles">Miles Driven:</label> 
    <input type="text" id="miles"><br> 
    <label for="gallons">Gallons of Gas Used:</label> 
    <input type="text" id="gallons"><br> 
    <label for="mpg">Miles Per Gallon</label> 
    <input type="text" id="mpg" disabled><br> 
    <label>&nbsp;</label> 
    <input type="button" id="calculate" value="Calculate MPG"><br> 
    <input type="button" id="clear" value="clear"><br> 
</section> 
+0

переход на $ ("мили"). Get (0) .firstChild.nodeValue = "" и аналогичным образом для других. Это должно решить вашу проблему. – vishakvkt

+1

@elclanrs - Я не уверен, что они используют jQuery, потому что '$ (" miles ")' не будет работать, если это jQuery. Интересно, является ли '$' синонимом 'document.getElementById()'. Также нет, в этом вопросе нет тега jQuery. – jfriend00

+0

К ОП. Что такое '' 'в вашем проекте. Это jQuery? Или это 'document.getElementById()'? Кроме того, пожалуйста, покажите нам соответствующий HTML, чтобы мы могли убедиться, что ваш javascript правильно нацеливается на нужные объекты. – jfriend00

ответ

1

Входные элементы не имеют дочерних узлов, так firstChild дает нуль, еще более, если вы пытаетесь очистить значение из поля ввода используют свойство value.

var clear = function(){ 
    $("miles").value = ""; 
    $("gallons").value = ""; 
    $("mpg").value = ""; 
} 
2

Я думаю, что вы хотите, это, где вы используете .value свойство на полях ввода непосредственно:

var clear = function() { 
    $("miles").value = ""; 
    $("gallons").value = ""; 
    $("mpg").value = ""; 
} 

Вот объяснение того, что было продолжается. Теперь, когда мы видим вашу полную страницу и видим, что $ - document.getElementById(), проблема в том, что у вас есть некоторые из этих узлов, у которых нет firstChild.

Например, объект с id="miles" является входным тегом, и у него нет детей, поэтому .firstChild is null.

В этой строке:

$("miles").firstChild.nodeValue = ""; 

$("miles") получает вас объект DOM.

$("miles").firstChild возвращает null, потому что нет детей этого объекта DOM.

$("miles").firstChild.nodeValue = ""; ошибка, потому что $("miles").firstChild является null и null не имеют свойство .nodeValue.

+0

ОК, я понял все остальное. Мне просто нужно было использовать '$ (" miles "). Value =" ";'. Спасибо за прояснение! – oxxi

+1

@oxxi - почему вы выбрали другой ответ в качестве лучшего ответа, когда я много работаю с вами в комментариях, чтобы вы могли показать нам, что нам нужно, чтобы помочь вам, и я также дал правильный ответ и Я дал первый ответ, и я подробно объяснил, что не так с вашим исходным кодом? – jfriend00

+0

@ jfriend00 Вы думаете, что помощь, тяжелая работа и отличное объяснение заслуживают того, чтобы их приняли? :) – Ian

0

Рассматривая код, опубликованный в комментариях, проблема в том, что $("miles") и другие элементы не имеют детей.

Похоже, что вы пытаетесь сделать что-то вроде этого:

var clear = function() { 
    $("miles").value = ""; 
    $("gallons").value = ""; 
    $("mpg").value = ""; 
} 
+0

Теперь, когда вы можете увидеть HTML, это довольно ясно, что объекты мишени здесь являются полями ввода, и у них никогда не бывает детей. – jfriend00

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