未捕获的 ReferenceError:(函数)未在 HTMLButtonElement.onclick 处定义
2017-01-07
86672
我有一个搜索表单,我想让它在页面底部输出结果而无需重新加载。
<form action='' method='post'>
<div id="search-form">
<input type="text" name="search" class="search-field" id="search" value="" />
<div class="submit-container">
<button type="button" value="" class="submit" id="searchbutton" onclick="searchoutput()" /></button>
</div>
</form>
<br><br>
<p>Type First Name</p>
我希望在单击按钮时使用 Ajax 调用另一个脚本,在下方显示搜索结果。我一直收到错误:“未捕获的 ReferenceError:searchoutput 未在 HTMLButtonElement.onclick 中定义
这是我的 javascript(使用 jquery):
$( document ).ready(function() {
function searchoutput() {
if($(".search-field").val().length > 5) { //only shows results when more than 5 characters have been entered
var search = $(".search-field").val();
var update = $(".result");
var goal = 0;
$.get("query-include.php" , {search: search, goal: goal})
.done(function( data ) {
update.empty();
update.append(data);
$(this).remove();
});
};
}
$( ".search-field" ).keydown(function() {
var update =$(".results");
update.empty();
});
});
我查看了其他帖子,花了很长时间尝试自己找到解决方案。奇怪的是,如果我为“keyup”添加事件侦听器,以便在用户键入时运行相同的函数 searchoutput:
var searchfield = document.getElementById("search");
searchfield.addEventListener("keyup", searchoutput);
然后我没有收到 ReferenceError,脚本运行良好。我只在单击按钮时遇到函数问题。
3个回答
这是一个范围问题 -
searchOutput
在
$(document).ready()
函数的范围内定义。您可以尝试在该代码之前为
searchOutput
声明一个变量,然后将其分配给该函数,如下所示:
var searchOutput;
$( document ).ready(function() {
searchOutput = function () {
if($(".search-field").val().length > 5) {
//etc.
hackerrdave
2017-01-07
我在 searchoutput() 的位置添加了一个 eventListener;
$( document ).ready(function() {
$('.submit').addEventListener('click', function(){
if($(".search-field").val().length > 5) { //only shows results when more than 5 characters have been entered
var search = $(".search-field").val();
var update = $(".result");
var goal = 0;
$.get("query-include.php" , {search: search, goal: goal})
.done(function( data ) {
update.empty();
update.append(data);
$(this).remove();
});
}
});
$( ".search-field" ).keydown(function() {
var update =$(".results");
update.empty();
});
});
liontass
2017-01-07
就我而言,
我在 JS 中使用了模块化代码(即 import 和 export 语句),因此当我尝试使用
onclick
时,它不会调用我的
submit
函数。当我简单地从 JS 代码中删除 import 语句并用一些默认值替换依赖代码时,
onclick
调用了我的函数。然后我尝试使用
addEventListener
和
import/export
,最后它成功了。
Mr. Noddy
2021-07-07