0

我为电子邮件注册表单编写了以下 jQuery 代码。

$(document).ready(function () {
  var default_value = '<?php echo $email_text ?>';
  var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  $('#email').each(function () {
    $(this).focus(function () {
      if (this.value == default_value) {
        this.value = '';
      }
    });
  $(this).blur(function () {
    if (this.value == '') {
      this.value = default_value;
    }
  });
});
$('button#yes').hover(function () {
  $(this).css('background', '#fff').css('cursor', 'not-allowed');
  $('#email').css('background', '#ca9822');
}, function () {
  $(this).css('background', '').css('cursor', '');
  $('#email').css('background', '');
});
$('#email').keyup(function () {
  if (this.value.length > 2 && this.value !== default_value && filter.test(this)) {
    $('button#yes').unbind().css('background', '').css('cursor', '').click(function () {
      showconfirm();
    });
    $('#email').css('background', '');
  } else {
    $('button#yes').unbind().hover(function () {
      $(this).css('background', '#fff').css('cursor', 'not-allowed');
        $('#email').css('background', '#ca9822');
      }, function () {
        $(this).css('background', '').css('cursor', '');
        $('#email').css('background', '');
      });
    }
  });
$("form#signupform").submit(function () {
. . .

它基本上做的是检查输入表单,然后启用“是”按钮,然后触发该showconfirm()功能,这会带来一个真正的提交按钮,最终处理提交操作等。

问题是我只需要“确认”按钮来解决条款和隐私政策问题。我真的很想在第一个按钮上完成整个检查过程。我的意思是如果输入的电子邮件不符合某些条件,用户应该不能单击“是”。我可以让它工作到value.length > 2(我在另一篇 SO 文章中读到,电子邮件的最小长度可以是 3 个字符,即“a@b”......这就是它的> 2来源,如果你'想知道)直到value !== default_value(默认值基本上是“您的电子邮件”,它从输入字段中清除并在输入字段中重新绘制,因为用户在输入任何自定义数据之前关注并模糊输入)。但是当我放入时,filter.test()我总是会得到一个false

当然我在这里用错了,虽然我不知道怎么做。我以前在该submit功能下使用它,效果很好。但是,正如我所说,我正在努力让这一切都在流程的第一部分发挥作用。真的,在submit函数中,这最终成为重复代码等的麻烦,添加错误消息等,等等,等等。这就是我想切换它的原因。

请问有什么想法吗?

4

1 回答 1

0

您正在尝试在输入元素上测试模式,而不是在其值上。尝试这个:

$('#email').keyup(function () {
  if (this.value.length > 2 && this.value !== default_value && filter.test(this.value)) {

你试过了filter.test(this),但你应该使用filter.test(this.value).

于 2013-05-29T17:42:57.650 回答