未捕获的TypeError:无法调用未定义的方法'contains'

时间:2013-02-21 09:05:40

标签: jquery

注意请参阅this question了解一些背景信息......

所以我的(非常基本的)表单验证工作正常。

检查电子邮件地址字段的输入值时,我想确保电子邮件地址有一个值(即非空白)并包含@.个字符,所以我这样做了...

<div width="100%" class="con1">

    <div class="lable">
        <label for="email">Email Address *</label>
    </div>
    <input  type="text" name="email" class="span4">

</div>

<script>

$('input[type=submit]').click(function() {
    var parentname = $(this).parent('div');
    console.log('Form used: ' + parentname);

    var email = 0,

    // Validate email
    if ($('.' + parentname.attr('class') + ' #email').val() == '')
    {
        alert('Please enter a valid email address');
    }
    else
    {
        if (($('.' + parentname.attr('class') + ' #email').val().contains('@')) && ($('.' + parentname.attr('class') + ' #email').val().contains('.')))
        {
            email = 1;
        }
        else
        {
            alert('Please enter a valid email address');
        }
    }
});
</script>

看起来有点奇怪,但上面链接问题中提到的复杂性要求我与我的选择者略有不同。

基本上$('.' + parentname.attr('class') + ' #email')与写作相同(在我使用$('.con1 #email')作为选择器的情况下,我认为基于我的HTML结构是正确的。

我尝试使用$('.' + parentname.attr('class').child('#email'),但后来又收到错误,说该元素没有方法'child'

我是根据我之前创建的一个表单写的,我使用了相同的原理来阻止来自yahoo.com的电子邮件,因为我从那里收到了大量的垃圾邮件:

if ($("#contact-email").val().contains("yahoo.com")) {
     $(".errmsg").text("Domain yahoo.com has been banned due to excessive spam, please use another domain.");
}
else
{
    email = 1;
}

虽然我在此处粘贴的第二个示例有效,但是第一个更彻底验证电子邮件字段的示例仍然会返回此错误:

  

未捕获的TypeError:无法调用未定义的方法'contains'

我无法理解这在一个网站中是如何工作的,而不是另一个网站。我觉得我错过了一些东西,所以如果有人能看到那可能是什么,我会很感激。

提前致谢!

1 个答案:

答案 0 :(得分:1)

元素应该有id="email"以允许选择器:

$('.' + parentname.attr('class') + ' #email')