Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-仅允许特定电子邮件域注册_Javascript_Jquery_Html - Fatal编程技术网

Javascript jQuery-仅允许特定电子邮件域注册

Javascript jQuery-仅允许特定电子邮件域注册,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试用两种特定的用户类型创建一个注册表,分别称为usertype1和usertype2 usertype1-允许所有电子邮件域 usertype2-仅限特定的电子邮件域 在usertype2中,域列表: schoolA.com 学校网站 schoolC.com 这是我的代码: (函数(){ $(“#email”).attr('占位符','请放入您的学生电子邮件'); $(“#用户类型”).change(函数(){ if($(“#usertype”).val()=“usertype1”

我正在尝试用两种特定的用户类型创建一个注册表,分别称为
usertype1
usertype2

  • usertype1
    -允许所有电子邮件域
  • usertype2
    -仅限特定的电子邮件域
  • usertype2
    中,域列表:

    • schoolA.com
    • 学校网站
    • schoolC.com
    这是我的代码:

    (函数(){
    $(“#email”).attr('占位符','请放入您的学生电子邮件');
    $(“#用户类型”).change(函数(){
    if($(“#usertype”).val()=“usertype1”){
    $(“#email”).attr('占位符','请放入您的学生电子邮件');
    email=$(“#email”).split('@').slice(1);
    var域=['schoolA.com'、'schoolB.com'、'schoolC.com'];
    如果($.inArray(电子邮件、域)!==1){
    $(':input[type=“submit”]).prop('disabled',false);
    }否则{
    $(':input[type=“submit”]).prop('disabled',true);
    }
    }否则{
    $(“#email”).attr('占位符','请放入您的学生电子邮件');
    }
    });
    });
    
    
    A学校
    B学校
    
    代码片段中有几个问题:

    • 函数被包装在
      ()
      中,但从未执行,这就是为什么“占位符没有出现”——没有代码正在运行。建议:在
      $()
      中包装函数,以便在加载页面后执行该函数
    • $(“#电子邮件”)
      没有像
      split()
      那样的方法。我想这里应该是
      $(“#email”).val().split()
    • .slice(1)
      返回一个数组,该数组不正确。这里应该是一个普通的
      [1]
      来获取电子邮件的域名
    • 检查用户类型的内部函数仅在
      #userty
      选择器更改时运行。当页面初始化/
      #用户属性
      选择器更改/
      #电子邮件
      输入值更改时,最好使其运行
    • jQuery选择器使用过度。最好使用选择器一次并将结果存储在变量中。效率更高
    在解决了这些问题之后,就可以开始了。以下是一段有效的代码片段:

    $(函数(){
    var$email=$(“#email”);
    var$userType=$(“#userType”);
    var$submitButton=$(':input[type=“submit”]);
    $email.attr('占位符','请放置您的学生电子邮件');
    $userType.change(checkUserType);
    $email.keyup(checkUserType);
    checkUserType();
    函数checkUserType(){
    如果($userType.val()=“usertype1”){
    $email.attr('占位符','请放置您的学生电子邮件');
    var emailDomain=$email.val().split('@')[1];
    var域=['schoolA.com'、'schoolB.com'、'schoolC.com'];
    如果($.inArray(emailDomain,域)<0){
    $submitButton.prop('disabled',true);
    }否则{
    $submitButton.prop('disabled',false);
    }
    }否则{
    $email.attr('占位符','请放置您的学生电子邮件');
    $submitButton.prop('disabled',false);
    }
    }
    });
    
    
    A学校
    B学校
    
    如果($.inArray(电子邮件,域)!==1)
    有额外的空间,则您的代码行
    。如果($.inArray(电子邮件,域)!==1)
    :)@obdimanage谢谢你,那么应该是
    。已经修好了,但还是不行。JS控制台说:未捕获的语法错误:意外令牌!:(对不起,我是个白痴。用
    $替换它。inArray(电子邮件,域)=-1
    。应该可以;)完成,占位符没有出现。我试图更改2个选定选项的值,但占位符和提交按钮不起作用。我要重写事件处理程序吗?你是最棒的!给我一个完美的解释。非常感谢你!您所说的“jQuery选择器被过度使用了,最好使用一次选择器并将结果存储在变量中,这样效率更高”是什么意思?是关于嵌套的if-else吗?@rootnel不,不是关于嵌套的if-elst。我的意思是:
    $(…)
    语句使用太多--此语句将搜索页面中的元素,这将消耗一些CPU资源。因此,如果有两个相同的
    $(…)
    语句,那么相同的搜索将被发送两次,这是一种浪费。谢谢你的解释。:)