JQuery - .val() 返回旧值

6
我有些问题,我正在使用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");

and

this.prop("value");

同样的问题。

当我使用console.log(this);并查看输入值的对象时,它是正确的,包含正确的值。

那么如何获得正确的值呢? 这就是我请求您帮助的原因。

谢谢。

2个回答

10
不要使用keypress事件,因为它在新的valuecharacter被注册到input之前被触发。请改用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()
                    }
                });
            });

谢谢,你做得很棒!:D 只要试一下就可以了,谢谢。 - kaldoran
@kaldoran,请不要忘记将最有帮助的答案标记为已接受,以指导未来阅读此帖子的读者。 - AmmarCSE
我忘记做了 :p 谢谢 ;) (之前尝试过但有一个计时器,我们需要等待15分钟才能标记最有帮助的答案) - kaldoran

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接