这是我的代码:
$(document).on('click', '.addNewName', function addNewUser() {
var names = $('.compare_list td:nth-child(1)').map(function () {
return $(this).text().trim();
}).get();
var newname = $('.newname').val();
if ($.inArray(newname, names) != -1) {
alert('this name is duplicate');
} else if (newname == '') {
alert('enter a name');
} else {
$('.compare_list > tbody:last-child').append('<tr><td>'+newname+'</td><td><i class="fa fa-times" aria-hidden="true"></i></td></tr>');
}
})
// add user by Enter button
$("#newnam").keypress(function (e) {
if (e.keyCode == 13) {
addNewUser();
}
});
当我点击.addNewName
时,我的代码也能正常运行。但是当我按下#newname
的按键输入时,会抛出此错误:
未捕获的ReferenceError:未定义addNewUser(...)
有人怎么解决?
答案 0 :(得分:3)
问题javasctipt
的{{1}}未定义在addNewUser
函数范围之外。
将addNewUser
定义为命名函数,在addNewUser
.addNewName
事件中设置为事件处理程序,调用并可能将参数传递给click
addNewUser
#newnam
1}}事件。
keypress
答案 1 :(得分:2)
function addNewUser() {
var names = $('.compare_list td:nth-child(1)').map(function () {
return $(this).text().trim();
}).get();
var newname = $('.newname').val();
if ($.inArray(newname, names) != -1) {
alert('this name is duplicate');
} else if (newname == '') {
alert('enter a name');
} else {
$('.compare_list > tbody:last-child').append('<tr><td>'+newname+'</td><td><i class="fa fa-times" aria-hidden="true"></i></td></tr>');
}
}
$(document).on('click', '.addNewName', addNewUser);
将addNewUser
的功能定义移出$(document).on
。将其替换为名称
答案 2 :(得分:2)
如果您想在多个事件中使用相同的功能,请单独创建功能并在您想要呼叫时调用它。 使AddNewUser函数成为一个单独的函数,并在两个元素事件上调用它。
function addNewUser() {
var names = $('.compare_list td:nth-child(1)').map(function () {
return $(this).text().trim();
}).get();
var newname = $('.newname').val();
if ($.inArray(newname, names) != -1) {
alert('this name is duplicate');
} else if (newname == '') {
alert('enter a name');
} else {
$('.compare_list > tbody:last-child').append('<tr><td>'+newname+'</td><td><i class="fa fa-times" aria-hidden="true"></i></td></tr>');
}
}
调用它添加新按钮单击
$(document).on('click', '.addNewName',function(){
addNewUser();
});
在newnam上点击按下按键
$("#newnam").keypress(function (e) {
if (e.keyCode == 13) {
addNewUser();
}
});
答案 3 :(得分:2)
function addNewUser() {
var names = $('.compare_list td:nth-child(1)').map(function () {
return $(this).text().trim();
}).get();
var newname = $('.newname').val();
if ($.inArray(newname, names) != -1) {
alert('this name is duplicate');
} else if (newname == '') {
alert('enter a name');
} else {
$('.compare_list > tbody:last-child').append('<tr><td>'+newname+'</td><td><i class="fa fa-times" aria-hidden="true"></i></td></tr>');
}
}
$(document).on('click', '.addNewName', addNewUser)
// add user by Enter button
$("#newnam").keypress(function (e) {
if (e.keyCode == 13) {
addNewUser();
}
});
答案 4 :(得分:2)
你可以这样做。只需将$(this)
选择器传递给函数并在外部声明函数并在多个事件上调用它。
$(document).on('click', '.addNewName', function() {
addNewUser($(this));
});
function addNewUser($THIS) {
var names = $('.compare_list td:nth-child(1)').map(function() {
return $THIS.text().trim();
}).get();
var newname = $('.newname').val();
if ($.inArray(newname, names) != -1) {
alert('this name is duplicate');
} else if (newname == '') {
alert('enter a name');
} else {
$('.compare_list > tbody:last-child').append('<tr><td>' + newname + '</td><td><i class="fa fa-times" aria-hidden="true"></i></td></tr>');
}
}
// add user by Enter button
$("#newnam").keypress(function(e) {
if (e.keyCode == 13) {
addNewUser($(this));
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 5 :(得分:0)
只需声明$(document).on('click', function() {})
上方的函数即可。现在,您正在声明一个命名的匿名函数。相反,将其定义为顶级函数。
function addNewUser() {
//...
}
$(document).on('click', '.addNewName', addNewUser );