JQuery - .val()返回旧值

时间:2015-06-08 10:30:55

标签: javascript jquery

我使用时遇到了一些麻烦 https://github.com/mailcheck/mailcheck

使用此功能

                $('#email').on('keypress', function(event) {
                $(this).mailcheck({
                    suggested: function(element, suggestion) {
                        $('#email_check').html("Did you mean <b><i><a href='#' id='suggest_email'>" + suggestion.full + "</a></b></i>?");
                        $('#suggest_email').on('click', function(event) {
                            event.preventDefault();
                            $('#email').val($(this).text());
                            $('#email_check').empty();
                            $('.error_js').empty()
                        });
                    },
                    empty: function(element) {
                        $('#email_check').empty();
                        $('.error_js').empty()
                    }
                });
            });

但是当脚本使用时:

opts.email = this.val(); 

(此文件的第263行https://github.com/mailcheck/mailcheck/blob/master/src/mailcheck.js

this.val()返回输入的旧值。 我试图使用

this.attr("value");

this.prop("value");

同样的问题。

当我做一个console.log(这个);并且在对象中寻找我输入的值,它很好,它包含了很好的价值。

如何获得适当的价值呢? 这就是我请求你帮助的原因。

感谢。

2 个答案:

答案 0 :(得分:9)

请勿使用keypress事件,因为在value中注册新的characterinput之前会触发该事件。请改用keyup

$('#email').on('keyup', function(event) {
                $(this).mailcheck({
                    suggested: function(element, suggestion) {
                        $('#email_check').html("Did you mean <b><i><a href='#' id='suggest_email'>" + suggestion.full + "</a></b></i>?");
                        $('#suggest_email').on('click', function(event) {
                            event.preventDefault();
                            $('#email').val($(this).text());
                            $('#email_check').empty();
                            $('.error_js').empty()
                        });
                    },
                    empty: function(element) {
                        $('#email_check').empty();
                        $('.error_js').empty()
                    }
                });
            });

答案 1 :(得分:1)

控制台日志对象显示对象首次展开时的对象属性,因此在您的情况下,当按键事件触发时,该值尚未设置,但是稍后在控制台中读取它时,它已设置。要查看对象属性的实际当前状态,仅记录该属性而不是整个对象

keyup事件应该可以正常工作。