Uncaught TypeError: Cannot read property 'value' of null when it exists
Uncaught TypeError: Cannot read property 'value' of null when it exists
所以我收到了这个错误:
script.js:44 Uncaught ReferenceError: myname is not defined
指向这一行:
myname = document.getElementById("#text_name").value;
但在 HTML 中,它存在:
<form class="frm" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
我什至尝试过使用查询选择器:
myname = document.querySelector("text_name").value;
你已经得到了 #
从后到前的用法。
您正在寻找:
myname = document.getElementById("text_name").value;
或者:
myname = document.querySelector("#text_name").value;
使用 .getElementById()
, but you do need it when referencing an ID with .querySelector()
引用 ID 时不需要 #
。
更正 #
问题后,请确保您没有在 DOM 加载元素之前尝试查找该元素。将 <script>
放在正文结束 (</body>
) 之前,因为当解析器到达该点时,所有元素都将被解析。
这行不通:
<body>
<script>
// This won't work because, the HTML element hasn't been reached by the parser yet.
var myname = document.getElementById("text_name").value;
</script>
<form class="complex_form" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
</body>
移动脚本解决问题:
<body>
<form class="complex_form" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
<script>
// This works because now, the HTML element has been reached by the parser.
var myname = document.getElementById("text_name").value;
</script>
</body>
此外,如果您要获取表单域的 value
,您必须等待更长的时间,因为您必须让用户有机会输入一个值。对于这种类型的操作,您可以将代码绑定到在用户输入后触发的事件处理程序。所以,实际上,代码应该是这样的:
<body>
<form class="complex_form" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
<button type="button">Check the input value</button>
<script>
// Get a reference to the button
var btn = document.querySelector("button[type='button']");
// Add a click event handler. This handler won't run until someone
// clicks the button, which would be after someone enters text into the input
btn.addEventListener("click", function(){
// This works because now, the HTML element has been reached by the parser.
var myname = document.getElementById("text_name").value;
console.log(myname);
});
</script>
</body>
所以我收到了这个错误:
script.js:44 Uncaught ReferenceError: myname is not defined
指向这一行:
myname = document.getElementById("#text_name").value;
但在 HTML 中,它存在:
<form class="frm" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
我什至尝试过使用查询选择器:
myname = document.querySelector("text_name").value;
你已经得到了 #
从后到前的用法。
您正在寻找:
myname = document.getElementById("text_name").value;
或者:
myname = document.querySelector("#text_name").value;
使用 .getElementById()
, but you do need it when referencing an ID with .querySelector()
引用 ID 时不需要 #
。
更正 #
问题后,请确保您没有在 DOM 加载元素之前尝试查找该元素。将 <script>
放在正文结束 (</body>
) 之前,因为当解析器到达该点时,所有元素都将被解析。
这行不通:
<body>
<script>
// This won't work because, the HTML element hasn't been reached by the parser yet.
var myname = document.getElementById("text_name").value;
</script>
<form class="complex_form" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
</body>
移动脚本解决问题:
<body>
<form class="complex_form" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
<script>
// This works because now, the HTML element has been reached by the parser.
var myname = document.getElementById("text_name").value;
</script>
</body>
此外,如果您要获取表单域的 value
,您必须等待更长的时间,因为您必须让用户有机会输入一个值。对于这种类型的操作,您可以将代码绑定到在用户输入后触发的事件处理程序。所以,实际上,代码应该是这样的:
<body>
<form class="complex_form" id="create_text">
<div class="texttitle">Send</div>
<input id="text_name" type="text" class="form_element" placeholder="text" name="my_text" required/>
<textarea rows="5" id="actual_text" class="form_element" name="actual_text" placeholder="Text" required></textarea>
<button type="submit" class="btn">Send text</button>
</form>
<button type="button">Check the input value</button>
<script>
// Get a reference to the button
var btn = document.querySelector("button[type='button']");
// Add a click event handler. This handler won't run until someone
// clicks the button, which would be after someone enters text into the input
btn.addEventListener("click", function(){
// This works because now, the HTML element has been reached by the parser.
var myname = document.getElementById("text_name").value;
console.log(myname);
});
</script>
</body>