如何在按键上调用已定义的函数?

时间:2016-11-12 06:45:38

标签: javascript jquery

这是我的代码:

    $(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(...)

有人怎么解决?

6 个答案:

答案 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)选择器传递给函数并在外部声明函数并在多个事件上调用它。

&#13;
&#13;
$(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;
&#13;
&#13;

答案 5 :(得分:0)

只需声明$(document).on('click', function() {})上方的函数即可。现在,您正在声明一个命名的匿名函数。相反,将其定义为顶级函数。

function addNewUser() {
    //...
}

$(document).on('click', '.addNewName', addNewUser );