Heim  >  Artikel  >  Web-Frontend  >  Detailliertes Beispiel dafür, wie H5 die automatische Überprüfung der Benutzerregistrierung durchführt

Detailliertes Beispiel dafür, wie H5 die automatische Überprüfung der Benutzerregistrierung durchführt

Y2J
Y2JOriginal
2017-05-24 13:27:072522Durchsuche

Html5Implementierung der BenutzerregistrierungBeispielcode für die automatische Verifizierungsfunktion

05-24 10:49:46 Autor: PHP Chinesische Website

Ich habe mir die Zeit genommen, eine HTML5-Benutzerregistrierungsdemo mit automatischer Verifizierungsfunktion zu schreiben. HandlebarsVorlagentechnologie und MobiltelefonVerifizierungscode werden zur Verifizierung verwendet.

Das Folgende ist ein Screenshot des Effekts:

1. Seitencode:userRegister.hbs

XML /HTML CodeInhalt in die Zwischenablage kopieren
  1. >     

  2.      

  3.      

  4.      

  5. <html lang="en">     

  6.      

  7. <Kopf>     

  8.     <meta http-equiv="Content-Type" content="text/html; charset =utf-8">     

  9.     <meta http-equiv="X-UA-Compatible" content="IE=edge" />     

  10.     <title>用户注册title >     

  11.          

  12.     <div class="main" >     

  13.         <div style="height:5px;text-align:center ;font-size:25px"> 欢迎您注册!div>     

  14.              

  15.         <Formular  id="my-form" class="myform">     

  16.             🎜>Label>用户名:

    Label
  17. >

    <Eingabe id="Benutzername" Name="Benutzername" Typ ="text" />                 div >     

  18.             
  19. <

    div>     

  20.                 
  21.                      label

  22. >
  23. <input

     
  24. id
  25. =

    "pass" Name="Passwort" Typ="Text" />                 div>                 <div>

         
  26.                 <label>

    邮箱:
  27. label><input

     id
  28. =

    "E-Mail" Name="E-Mail"  .                                        🎜>Datenideal="required email" type="email" />                 

  29. div

    >     

  30.             🎜>label>电话:

    label
  31. >

    <Eingabe id="Telefon" Typ="Text" Name= "phone" data-ideal="phone" />                 div>     

  32.             
  33. <

    div >

  34.                      >

    label><input

     id
  35. =

    "vCode " type="text" name="vCode" data-ideal="vCode" />                 div>                      <Label>真实姓名:

    Label><input

     
  36. id
  37. =

    "trueName" type="text" name

    =
  38. "trueName"
  39.  

    data-ideal="trueName" />                 div>                 <div>                     <label>手机验证码:

    label><input

     
  40. id
  41. =

    "telCode" type="text" name

    =
  42. "telCode"
  43.  

    data-ideal="telCode" />     

  44.             div>     

  45.             < div style="margin-bottom:5px;">     

  46.                 >"button" style="margin-left:160px; margin-right:auto;"  & gt; ;hr style="margin-top:5px; margin-bottom:5px;" /> ;                 🎜> & lt;!- & lt; div

  47. & gt;
  48. Label

    >性别:Label>                      

    <
  49. select

     id="sex" name=

    "sex"
  50. >

                             ">

  51. Option>                         <Option Wert

    ="女"
  52. >Option>                     auswählen

  53. >
  54.             ><div>     

  55.                 ><input id="nickName" type="text" name="nickName" data-ideal="nickName" />                 <div>     

  56.            nbsp;     <Label>年龄:

  57. Label

    ><Eingabe 

    id
  58. =
  59. "Alter"

     Typ="Text" name="age" data-ideal="age" />                 div>-->                      

  60.     div>     

  61. < ;script type="text/javascript">     

  62. var options = {     

  63.         onFail : function() {     

  64.             alert($myform.getInvalid().length + ' ungültige Felder.')     

  65.         },     

  66.         Eingaben : {     

  67.             'Passwort ' : {     

  68.                 Filter : 'erforderlicher Bestanden'     

  69.             },     

  70.             'Benutzername' : {     

  71.                 Filter : 'erforderlicher Benutzername'     

  72.             },     

  73.             'E-Mail' : {     

  74.                 Filter : 'erforderliche E-Mail-Adresse'     

  75.             },                'Telefon' : {

  76.                 Filter : 'erforderliches Telefon'     

  77.             },     

  78.             'trueName' : {     

  79.                 Filter : 'erforderlich'     

  80.             },     

  81.             'vCode' : {     

  82.                 Filter : 'erforderlich'     

  83.             },     

  84.             'telCode ' : {     

  85.                 Filter : 'erforderlich'     

  86.             }     

  87.             /*     

  88.             'Alter' : {     

  89. >
  90.               🎜>                   min : 16,     

  91.                    max : 70     

  92.                  

  93.             },     

  94.             'Datei' : {     

  95.               Filter : 'Erweiterung',     

  96.                 Daten : {     

  97.                    Erweiterung : [ 'jpg' ]     

  98.                }     

  99.             },     

  100.             'Kommentare' : {     

  101.                Filter : 'min max',       

  102.                 Daten : {     

  103.                    min :  50,     

  104.                              }     

  105. },    🎜>                Daten : {     

  106.                    exclude : [ 'default' ]     

  107.                },     
  108.                  
  109. Fehler

     : {     

  110.                     exclude : '选择国籍.'     

  111.                 }     

  112.             },     

  113.            'langs[]' : {     

  114.                 Filter : 'min max',     

  115.                 Daten : {     

  116.                   Min.: 2,     

  117.             max : 3     

  118.                },     

  119.                Fehler : {     

  120.                    min : 'Überprüfen Sie mindestens <strong>2strong> Optionen.',     

  121.                     max : 'Nicht mehr als <stark>3stark > Optionen allegeschuldet.'     

  122.                 }     

  123.             }     

  124.             🎜>

  125.         }     

  126.     };     

  127.     $('#getTelCode').click(function() {     

  128.         var 

    Telefon =  document.getElementById("telephone").value;    //手机号码     

  129.         if (

    telephone ==  null || . Telefon == ""){     

  130.           🎜>

            }     

  131.         

    else
  132. {     
  133.             $.ajax({     

  134.                type : "GET",     

  135.               dataType : "

    json

    ",     
  136.                 URL : " ../api

    /getTelCode?
  137. telephone
  138. ="+ telephone,     

                    success : function(msg) {     

  139.                },         alert("获取手机校验码失败!" + e);     

  140.                                                              🎜>

  141. });  

  142. var $

    myform

    = $('#my -form').idealforms(options).data('idealforms');  
  143. $('#submit').click(function() {
  144. var Benutzername

    =
  145. Dokument
  146. .getElementById("Benutzername").value; //Benutzername

  147. var

    Passwort = Dokument.getElementById("pass") .value; //Passwort

  148. var

    E-Mail = Dokument .getElementById("email").value; //E-Mail-Adresse

  149. var

    telephone = document.getElementById("telephone ").value; //Mobiltelefonnummer

  150. var

    vCode = document.getElementById("vCode").value; // Firmen-V-Code

  151. var

    telCode = document.getElementById("telCode").value; //Mobiltelefon-Bestätigungscode

  152. var

    trueName = document.getElementById("trueName").value; //Echtname

  153. $.ajax({ GET", 

                                                                                                                                                      . >="+ Passwort +"

  154. E-Mail
  155. =

    "+ E-Mail + "

  156. Telefon
  157. =

    "+ Telefon +"

  158. vCode
  159. =

    "+ vCode +"telCode= "+ telCode +"trueName="+ trueName ,                                                                                                                                         j/ share/meun.jsp                                                                                                     🎜>                                                                                                                                                                                         // Holen Sie sich die Verzeichnis nach der Hostadresse, wie zum Beispiel: uimcardprj/share/meun.jsp                                               🎜> window.document.location.pathname;

  160. var pos = curWwwPath.indexOf(pathName);

  161. // Holen Sie sich die Hostadresse, wie zum Beispiel: http://localhost:8083

  162. var localhostPaht = curWwwPath.substring(0, pos):                                                                                       > =

    pathName
  163. .
  164. substr

    ing(0, pathName.substr(1).indexOf(' /') + 1); window.location.href

    =
  165. Projektname
  166. + "/login";

    🎜> },                                                  ert( „Registrierung fehlgeschlagen!“ + e); > $('#reset').click(function() {

  167. $myform.reset().fresh().focusFirst();

    });                                        🎜>

  168. < ;/
  169. body

  170. >
  171.  

  172. html
  173. >

     
  174. 2.jq-Eingabeüberprüfung: jquery .idealforms.js
  175. Die ursprüngliche Version dieser js-Verifizierung stammt von Cedric Ruiz, ich habe sie leicht modifiziert. Die Regeln für die
  176. Teilüberprüfung lauten wie folgt:

    erforderlich: „Dies ist erforderlich.“
  177. Nummer: „Muss eine Zahl sein.“,

    Ziffern: 'Muss eine eindeutige Zahl sein.'
  178. Name: 'Muss mindestens 3 Zeichen lang sein und darf nur Buchstaben enthalten.'

    Benutzername: 'Benutzername muss mindestens 5 Ziffern haben lang, die maximale Länge beträgt 30 Zeichen, bitte verwenden Sie englische Buchstaben, Zahlen, chinesische Zeichen und Unterstriche. Das erste Zeichen des Benutzernamens muss Buchstaben, Zahlen, chinesische Zeichen sein, nicht alle Zahlen. Die maximale Länge chinesischer Zeichen beträgt 21 Zeichen. '
  179. pass: ' Das Passwort muss zwischen 6 und 15 Zeichen lang sein und mindestens eine Zahl, einen Großbuchstaben und einen Kleinbuchstaben enthalten. '

    strongpass: 'muss mindestens 8 sein Zeichen lang und enthalten mindestens einen Großbuchstaben und einen Kleinbuchstaben sowie eine Zahl oder ein Sonderzeichen.'email: 'muss eine gültige E-Mail-Adresse sein (Beispiel : '">user @gmail.com)'

  180. phone: 'Muss eine gültige Mobiltelefonnummer sein. (Beispiel: 18723101212)< /em>'

    Das Folgende ist die gesamte Codedatei: XML/HTML-Code

    Kopieren Sie den Inhalt in die Zwischenablage
    1. /*------------------------------------ --------------------------------------    

    2. jq-idealforms 2.1    

    3.   * Autor: Cedric Ruiz    

    4.   * Lizenz: GPL oder MIT    

    5.   * Demo: http://elclanrs.github.com/jq-idealforms/    

    6.   *    

    7. ------- -------------------------------------------------- -----------------*/     

    8. ;(function ( $, window, document, undefiniert ) {     

    9.   'use strict';     

    10.   // Globaler Ideal Forms-Namespace     

    11.   $.idealforms = {}     

    12.   $.idealforms.filters = {}     

    13.   $.idealforms.errors = {}     

    14.   $.idealforms.flags = {}     

    15.   $.idealforms. ajaxRequests = {}     

    16. /*--------------- ---------------------------------------------*/     

    17. /**    

    18.  * @namespace Eine Truhe für verschiedene Utils    

    19.  */     

    20. var Utils = {     

    21.   /**    

    22.    * Ermitteln Sie die Breite des breitesten Elements in der Sammlung.    

    23.    * @memberOf Utils    

    24.    * @param {jQuery object} $elms    

    25.    * @returns {number}    

    26.    */     

    27.   getMaxWidth: function( $elms ) {     

    28.     var maxWidth = 0     

    29.     $elms.each(function() {     

    30.       var  width = $(this).outerWidth()     

    31.       if ( width > maxWidth ) {     

    32.         maxWidth = width     

    33.       }     

    34.     })     

    35.     return maxWidth     

    36.   },     

    37.   /**    

    38.    * Hacky-Methode, WENIGER Variablen zu erhalten    

    39.    * @memberOf Utils    

    40.    * @param {string} name Der Name der LESS-Klasse.    

    41.    * @param {string} prop Die CSS-Eigenschaft, in der die Daten gespeichert werden.    

    42.    * @returns {number, string}    

    43.    */     

    44.   getLessVar: function( name, prop ) {     

    45.     var value = $('<p class="' + name + '">p>').hide().appendTo('body ').css( prop )     

    46.     $('.' + name).remove()     

    47.     return ( /^d+/. test( Wert ) ? parseInt( Wert, 10 ) : Wert )     

    48.   },     

    49.   /**    

    50.    * Wie ES5-Objekt.Schlüssels    

    51.    */     

    52.   getKeys: function( obj ) {     

    53.     var keys = []     

    54.     for(var key in

    55.       }     

    56.     }     

    57.     Eingabetasten     

    58.   },     

    59.   // Länge eines Objekts abrufen     

    60.   getObjSize: function( obj ) {     

    61.     var 

      size
    62.  = 
    63. 0

      , key;     

    64.     for ( key in         Größe++;     

            }     
    65.     }     
    66.     Rückgabegröße;     
    67.   },     
    68.   isFunction: function( obj ) {     
    69.     return typeof 
    70. obj
    71.  === nbsp;'function'     

    72.   },     

    73.   isRegex: function( obj ) {     

    74.     return obj instanceof RegExp     

        },     
    75.   isString: function( obj ) {     
    76.     return typeof 
    77. obj
    78.  === 'string'     

    79.   },     

    80.   getByNameOrId: function ( str ) {     

    81.     var $

      el = $('[name

      =
    82. "'+ str +'"
    83. ]').length     

    84.       ? $('[

      name

      =
    85. "'+ str +'"
    86. ]') //nach_Name     

            : $('#' + str) // by id     

          return $el.length     
    87.       ? $el     

            : $.error('Das Feld "'+ str + '" existiert nicht.')     
    88.   },     

    89.   getFieldsFromArray: function( fields ) {     

    90.     var f = []     

    91.     for ( var i = 0l = fields.length; i < l; i++ ) {     

    92.       f.push( Utils.getByNameOrId( fields [i] ).get(0) )     

    93.     }     

    94.     return $( f )     

    95.   },     

    96.   convertToArray: function( obj ) {     

    97.     return Object.prototype.toString.call( obj ) === ' [object Array]'     

    98.       ? obj : [ obj ]     

    99.   },     

    100.   /**    

    101.    * Bestimmen Sie den Typ eines beliebigen Idealforms-Elements    

    102.    * @param $input jQuery $input-object    

    103.    */     

    104.   getIdealType: function( $el ) {     

    105.     var type = $el.attr('type') || $el[0].tagName.toLowerCase()     

    106.     return (     

    107.       /(text|password|email|number|search|url |tel|textarea)/.test( type ) && 'text' |     

    108.       /file/.test( type ) ||     

    109.       /select/.test( type ) && 'select' |     

    110.       /(radio|checkbox)/.test( type ) |     

    111.       /(button|submit|reset)/.test( type ) && 'button' ||            /hd/.test( type ) && 'heading' |     

    112.       /hr/.test( type ) && 'separator' |     

    113.       /hidden/.test ( type ) && 'hidden'     

    114.     )     

    115.   },     

    116.   /**    

    117.    * Erzeugt eine Eingabe    

    118.    * @param name `name` Attribut der Eingabe    

    119.    * @param type `type` oder `tagName` der Eingabe    

    120.    */     

    121.   makeInput: function( Name, Wert, Typ, Liste, Platzhalter ) {     

    122.     Var-Markup, 

      Elemente
    123.  = [], item, i, len     
    124.     function splitValue( str ) {     

    125.       var item, value, arr     

    126.       if ( /::/.test( str ) ) {     

    127.         arr = str.split('::')     

    128.         item = arr[ 0 ]     

    129.         value = arr[ 1 ]     

    130.       } else {     

    131.         item = value = str     

    132.       }     

    133.       return { item: item, value: value }     

    134.     }     

    135.     // Text & Datei     

    136.     if ( /^(text|password|email|number|search|url|tel|file|hidden)$/.test(type) )     

    137.       markup = '+     

    138.         'type= "'+ type +'" '+     

    139.         'id="'+ name +'" '+     

    140.         'name="'+ name +'" '+     

    141.         ' value="'+ value +'" '+     

    142.         (placeholder && 'placeholder="'+ Platzhalter +'"') +     

    143.         '/>'     

    144.     // Textarea     

    145.     if ( /textarea/.test( type ) ) {     

    146.       markup = '+ Name +'" Name="'+ Name +'" Wert="'+ Wert +'" >textarea>'     

    147.     }     

    148.     // Select     

    149.     if ( /select/.test( type ) ) {     

    150. items = []     

    151.       for ( i = 0len = list.length; i < len; i++ ) {     

    152.         item = splitValue( list[ i ] ).item     

    153. value = splitValue( list[ i ] ).value     

    154.         items.push('<option value="'+ value +'" >'+ Element +'Option>')     

    155.       }     

    156.       Markup =     

    157.         '+ Name +'" name="'+ name +'">'+     

    158.           items.join( '') +     

    159.         'auswählen>'     

    160.     }     

    161.     // Radiocheck     

    162.     if ( /(radio|checkbox)/.test( type ) ) {     

    163.       items = []     

    164.       for ( i = 0, len = list.length; i  len; i++ ) {     

    165. item = splitValue( list[ i ] ).item     

    166.         

      value = splitValue ( list[ i ] ).value     

    167.         items.push(     

    168.           '

      <label>'+     

    169.             '

      <Eingabe Typ="'+ type +'" name="'+ name +'" value="'+ value +'"  />'+     

    170.             item +     

    171.           '

      Label>'     

    172.         )     

    173.       }     

    174.       

      markup = items.join('')     

    175.     }     

    176. return markup     

    177.   }     

    178. }     

    179. /**    

    180.  * Benutzerdefinierte Registerkarten für Ideale Formulare    

    181.  */     

    182. $

      .fn.idealTabs = function (container) {     

    183.   var     

    184.   // Elemente     

    185.   $Inhalt = dieser,     

    186.   $ContainerContainer  = container,     

    187.   $wrapper = $('<ul class="ideal-tabs-wrap"/>'),     

    188.   $tabs = ( function () {     

    189.     var tabs = []     

    190.     $contents.each(function () {     

    191.       var name = $(this).attr('name')     

    192.       var html =     

    193.         ''+     

    194.           '<span>' + name + 'span>'+     

    195.           '<i class="ideal-tabs-tab-counter ideal-tabs-tab-counter-zero">0i> '+     

    196.         'li>'     

    197.       tabs.push(html)     

    198.     })     

    199.     return $(tabs.join(''))     

    200.   }()),     

    201.   Actions = {     

    202.     getCurIdx: function () {     

    203.       return $tabs     

    204.         .filter('.ideal-tabs-tab-active ')     

    205.         .index()     

    206.     },     

    207.     getTabIdxByName: function (name) {     

    208.       var re = new RegExp(name, 'i')     

    209.       var $tab = $tabs.filter(function () {     

    210.         return re.test($(this).text())

    211.       })     

    212.       return $tab.index()     

    213.     }     

    214.   },     

    215.   /**    

    216.    * Öffentliche Methoden    

    217.    */     

    218.   Methoden = {     

    219.     /**    

    220.      * Switch Tab    

    221.      */     

    222.     switchTab: function (nameOrIdx) {     

    223.       var idx = Utils.isString(nameOrIdx)     

    224.         ? Actions.getTabIdxByName(nameOrIdx)     

    225.         : nameOrIdx     

    226.       $tabs.removeClass('ideal-tabs-tab-active')     

    227.       $tabs.eq(idx).addClass('ideal-tabs-tab-active')     

    228.       $contents.hide().eq( idx).show()     

    229.     },     

    230.     nächstesTab: Funktion () {     

    231.       var idx = Actions.getCurIdx() + 1     

    232.       idx > $tabs.length - 1     

    233.         ? Methods.firstTab()     

    234.         : Methods.switchTab(idx)     

    235.     },     

    236. prevTab: function () {     

    237.       Methods.switchTab(Actions.getCurIdx() - 1)     

    238.     } ,     

    239.     firstTab: function () {     

    240.       Methods.switchTab(0)     

    241.     } ,     

    242.     lastTab: function () {     

    243.       Methods.switchTab($tabs.length - 1)     

    244.     },     

    245.     updateCounter: function (nameOrIdx, text) {     

    246.       var idx = !isNaN (nameOrIdx)? nameOrIdx : Actions.getTabIdxByName(name),     

    247.           $counter = $tabs.eq(idx).find('.ideal-tabs-tab-counter' )     

    248.       $counter.removeClass('ideal-tabs-tab-counter-zero')     

    249.       if (!text) {     

    250.         $counter.addClass('ideal-tabs-tab-counter-zero')     

    251.       }     

    252.       $counter.html(text)     

    253.     }     

    254.   }     

    255.   // Anhängen Methoden     

    256.   for (var m in Methoden)     

    257.     $contents[m] = Methoden[m]     

    258.   // Init     

    259.   $tabs.first()     

    260.     .addClass('ideal-tabs-tab-active')

    261.     .end()     

    262.     .click(function () {     

    263.       var name = $(this).text()     

      🎜>
    264.   $wrapper.append($tabs).appendTo($container)     

    265.   $contents.addClass('ideal-tabs-content')

    266.   $contents.each(function () {     

    267.     var $

      this
    268.  = $(this), 
    269. name

       = $(this).attr('name')     

    270.     $this.data('ideal-tabs-content-name', name)     

    271.       .removeAttr('name')       })     

    272.   $contents.hide().first( ).show() // Neu starten     

    273.   return $contents     

    274. }     

    275. / **    

    276.  * Ein benutzerdefiniertes 

      <
    277. wählen

      >
    278.  Menü-jQuery-Plugin    
    279.  * @example `$('select').idealSelect()`    
    280.  */     $

      .fn.idealSelect
    281.  = 
    282. function

       () {     

    283.   return this.each(function () {     

    284.     var         $

      select
    285.  = $(this) ,     
    286.     $
    287. options

      &nbnbsp;= $select.find('option')     

    288.     /**    

    289.      * Markup generieren und Elemente der benutzerdefinierten Auswahl zurückgeben    
    290.      * @memberOf $.fn.toCustomSelect    

    291.      * @returns {object} Alle Elemente des neuen select-Ersatzes    

    292.      */     

    293.     var 

      idealSelect
    294.  = (function () {     
    295.       var     
    296.       $
    297. wrap

       = $('<

      ul
    298.  
    299. class

      =

      "ideal-select '+ $select .attr('name') +'"
    300. />

      '),           $menu = $(             '<

      li
    301. >

      <

      span
    302.  
    303. class

      ="ideal-select-title">' +               $options.filter(':selected ').text() +             'span

      >

    304. li
    305. >

      '           ),           Elemente = (function () {     

    306.         var 
    307. items

       = []     

    308.         $options.each(function ( ) {     

    309.           var $this = $(this)     

    310.           items.push('<li class="ideal-select-item">' + $this.text() + 'li>')     

    311.         })     

    312.         Artikel zurückgeben     

    313.       }())     

    314.       $menu.append('<ul  class="ideal-select-sub">' + items.join('') + 'ul >')     

    315.       $wrap.append($menu)     

    316.       return {     

    317.         select: $wrap,     

    318.         title: $menu.find('.ideal-select-title'),     

    319.         sub: $menu.find('.ideal-select-sub'),     

    320.         items: $menu.find('.ideal-select-item')

    321.       }     

    322.     }())     

    323.     /**    

    324.      * @namespace Methoden der benutzerdefinierten Auswahl    

    325.      * @memberOf $.fn.toCustomSelect    

    326.      */     

    327.     var Aktionen = {     

    328.       getSelectedIdx: function () {     

    329.         return idealSelect.items     

    330.           .filter('.ideal-select-item-selected').index()     

    331.       },     

    332.       /**    

    333.        * @private    

    334.        */     

    335.       init: (function () {     

    336. $ select.css ({

    337. Position : 'Absolute',

    338. links: '-999px'

    339.         })     

    340.         idealSelect.sub.hide()     

    341.         idealSelect.select.insertAfter($ select)     

    342.         idealSelect.select.css(     

    343.           'min-width',     

    344.           Utils.getMaxWidth(idealSelect.items)     

    345.         )     

    346.         idealSelect.items     

    347.           .eq($options.filter(':selected').index())     

    348.           .addClass('ideal-select-item-selected ')     

    349.       }()),     

    350.       noWindowScroll: function (e) {     

    351. if (e.which === 40 || e.which === 38 || e.which === 13) {     

    352. e.preventDefault ()

    353. }

    354. },

    355.       // Fokusverlust beim Scrollen    

    356. behoben      // 

    357.  

    358.         setTimeout(function () {     

    359.           $select.trigger('focus')     

    360.         }, 1)     

    361.       },     

    362.       focus: function () {     

    363.         idealSelect.select.addClass('ideal-select-focus')     

    364.         $(document).on('keydown.noscroll', Actions.noWindowScroll)     

    365.       },     

    366.       blur: function () {     

    367.         idealSelect.select     

    368.           .removeClass('ideal-select-open ideal-select-focus')     

    369.         $(document).off('.noscroll')     

    370.       },     

    371.       scrollIntoView: function (dir) {     

    372.         var     

    373.         $selected = idealSelect.items.filter('.ideal-select-item-selected'),     

    374. itemHeight = idealSelect .Items.OuterHeight (),

    375. MenüHeight = idealSelect.sub.outerHeight(),     

    376.         isInView = (function () {     

    377.           // Relative Position zum Untermenü

    378. var elpos = $ selected.position (). Top+itemHeight

    379. return dir === 'down'     

    380.             ? elPos <= menuHeight     

    381.             : elPos > 0     

    382.         }())     

    383.         if ( !isInView) {     

    384.           itemHeight = (dir === 'down')     

    385.             ? itemHeight // nach unten gehen     

    386.             : -itemHeight // nach oben gehen     

    387.           idealSelect.sub     

    388.             .scrollTop(idealSelect.sub.scrollTop() + itemHeight)     

    389.         }     

    390.       },     

    391.       scrollToItem: function () {     

    392.         var idx = Actions.getSelectedIdx(),     

    393.             height = idealSelect.items.outerHeight(),     

    394.             nItems = idealWählen .items.length,     

    395.             curHeight = height * (nItems - idx)     

    396.         idealSelect.sub.scrollTop(allHeight - curHeight)           },     

    397.       showMenu: function () {     

    398.         idealSelect.sub.fadeIn('fast')     

    399.         idealSelect.select.addClass('ideal-select-open')     

    400.         Actions.select(Actions.getSelectedIdx())     

    401. Aktionen.ScrolltoItem ()

    402. },

    403. hidemenu: function () {

    404.         idealSelect.sub.hide()     

    405.         idealSelect.select.removeClass('ideal-select-open')     

    406.       },     

    407.       select: function (idx) {     

    408.         idealSelect.items  .   

    409.           . removeClass('ideal-select-item-selected')     

    410.         idealSelect.items     

    411.           .eq(idx).addClass('ideal- select-item-selected')     

    412.       },     

    413.       change: function (idx) {     

    414.         var text = idealSelect.items.eq(idx).text()     

    415.         Aktionen. select(idx)     

    416.         idealSelect.title.text(text)     

    417.         $options.eq(idx).prop('selected', true)     

    418.         $select.trigger('change')     

    419.       },     

    420.       keydown : Funktion (Taste) {     

    421.         var     

    422.         idx = Aktionen.getSelectedIdx() ,     

    423.         isMenu = idealSelect.select.is('.ideal-select-menu'),     

    424.         isOpen = idealSelect.select.is('.ideal-select-open')     

    425.         /**    

    426.          * @namespace Taste gedrückt    

    427.          */     

    428.         var keys = {     

    429.           9: function () { // TAB  .   

    430.             if (isMenu) {     

    431.              Actions.blur()       Actions.hideMenu()     

    432.             }     

    433.           },     

    434.           13: function () { // ENTER     

    435.             if (isMenu)     

    436.               isOpen     

    437.               Actions.hideMenu()     

    438.                : Actions.showMenu()     

    439.             Actions.change(idx)     

    440.           },     

    441.           27: function () { / ESC  .   

    442.             if (isMenu) Actions.hideMen u()     

    443.           },     

    444.           40: function () { / DOWN  .   

    445.             

      <

       $options.length - 1) {     
    446.               isOpen     

    447.                 ? Actions.select(idx + 1)     

    448.                 : Actions.change(idx + 1)     

    449.            }     

    450.             Actions.scrollIntoView('down' )     

    451. >

                     wenn ( idx 

      >

    452.  0) {     
    453.               isOpen     
    454.                 ? Actions.select(idx - 1)     

    455.                 : Actions.change(idx - 1)     

    456.             }     

    457.             Actions.scrollIntoView('up')     

    458.           },     

    459.           'default': function  { // Buchstabe     

    460.             var     

    461.             

      Buchstabe
    462.  = 
    463. String

      .fromCharCode(key),     

    464.             $matches = idealSelect.items     

    465.               .filter(function () {                      return /^w+$/i.test( letter ) && // Modifizierertasten nicht zulassen (Strg, cmd, meta, 

      super
    466. ... )     
    467. nmatches = $ übereinstimmt. 🎜>.select.data('counter') + 1 || 0,     

    468.             

      curKey
    469.  = 
    470. idealSelect

      .select.data('key') || Schlüssel,     

    471.             // Keine Übereinstimmungen     

    472.              return false     
    473.             // Bei mehr Übereinstimmungen mit demselben Buchstaben  🎜> if (curKey

       === key) {     
    474.               if(counter < nMatches) {     

    475.                 idealSelect.select.data('counter ' , Zähler)     

    476.               }     

    477.              else {     

    478.                 idealSelect.select.data('counter ', 0)     

    479.                 

    480.             }     
    481.            // Wenn neuer Buchstabe     
    482.            
    483.              &nnbsp;idealSelect.select.data('counter', 0)     
    484.               
    485. newIdx

       = $matches.eq(0).index()    

    486.             }     

    487.             if (isOpen)     
    488.              Aktionen.select (newIdx)     
    489.             else     
    490.              Actions.change(newIdx)     
    491.             idealSelect .select.data('key', key )     
    492.             Actions.scrollToItem()     
    493.             Actions.focusHack()     
    494.           }     
    495.         }     
    496.         keys[key]     
    497.           ? keys[key]()     
    498.           : keys['default']()     
    499.       }     
    500.     }     
    501.     /**    
    502.      * @namespace Hält alle Ereignisse der benutzerdefinierten Auswahl für "Menümodus" und "Listenmodus"    
    503.      * @memberOf $.fn. toCustomSelect    
    504.      */     
    505.     var 
    506. Ereignisse
    507.  = {     

    508.       focus: Actions.focus,     

            'blur.menu': function () {     
    509.         Actions.blur ()     
    510.         Actions.hideMenu()     
    511.       },     
    512.       'blur.list' : function () {     
    513.         Actions.blur()     

    514.       },     

    515.       keydown: Funktion (e) {     

    516.         Actions.keydown(e.which)     

    517.       },     

    518.       'clickItem.menu': function () {     

    519.         Actions.change($(this).index())     

    520.         Actions.hideMenu()     

    521.       },     

    522.       'clickItem.list': function () {     

    523.         Actions.change($(this ).index())     

    524.       },     

    525.       'clickTitle.menu': function () {     

    526.         Actions.focus()     

    527.         Actions.showMenu()     

    528.         $select.trigger('focus')     

    529.       },     

    530.       'hideOutside.menu': function () {     

    531.         $select.off( 'blur.menu')     

    532.         $(document).on('mousedown.ideal', function (evt) {     

    533.           if ( !$(evt.target).closest(idealSelect.select).length) {     

    534.             $(document).off('mousedown.ideal')     

    535.             $select.on('blur.menu', events['blur.menu'])     

    536.           } else {     

    537.             Actions.focusHack()     

    538.           }     

    539.         })     

    540.       },     

    541.       'mousedown.list': function () {     

    542.         Actions.focusHack()     

    543.       }

    544.     }     

    545.     // Ereignisse zurücksetzen     

    546.     var disableEvents = Funktion () {     

    547.       idealSelect.select.removeClass('ideal-select-menu ideal-select-list')     

    548.       $select.off('.menu .list')     

    549.       idealSelect.items.off('.menu .list')     

    550.       idealSelect.select.off('.menu .list')     

    551.       idealSelect.title.off('.menu .list')     

    552.     }     

    553.     // Menümodus     

    554.     idealSelect.select.on('menu', function () {     

    555.       disableEvents()     

    556.       idealSelect.select.addClass('ideal-select-menu')     

    557.       Actions.hideMenu()    

    558.       $select.on({     

    559.         'blur.menu': events['blur.menu'],     

    560.         'focus. menu': events.focus,     

    561.         'keydown.menu': events.keydown     

    562.       })     

    563.       idealSelect.select.on('mousedown.menu', events['hideOutside.menu'])     

    564.       idealSelect.items.on('click.menu', events ['clickItem.menu'])     

    565.       idealSelect.title.on('click.menu', events['clickTitle.menu'])     

    566.     })     

    567.     // Listenmodus     

    568.     idealSelect.select.on('list', function () {     

    569.       disableEvents()     

    570.       idealSelect.select.addClass('ideal-select-list')     

    571. Actions.showMenu()     

    572.       $select.on({     

    573.         'blur.list': events['blur.list'],

    574.         'focus.list': events.focus,     

    575.         'keydown.list': events.keydown     

    576.       })     

    577.       idealSelect.select.on('mousedown.list', events['mousedown.list'])     

    578.       idealSelect.items.on('mousedown.list', events['clickItem.list'])     

    579.     })     

    580.     $ select.keydown(function (e) {     

    581.       // Standardmäßiges Keydown-Ereignis verhindern     

    582.       // um Fehler mit „Ideal Select events“ zu vermeiden.    

    583.       if (e.which !== 9) e.preventDefault()     

    584.     })     

    585.     // Zurücksetzen     

    586.     idealSelect.select.on('reset', function(){     

    587.       Actions.change(0)     

    588.     })     

    589.     idealSelect.select.trigger('menu') // Standardmäßig auf "Menümodus"     

    590.   })     

    591. }     

    592. /*    

    593.  * idealRadioCheck: jQuery plguin für Kontrollkästchen und Radioersatz >=

      radio
    594. ]').idealRadioCheck()    
    595.  */     $.fn.idealRadioCheck  = 

      function
    596. () {     
    597.   return this.each(function() {     
    598.     var $this = $(this)     

    599.     var $span = $('<span/>')     

    600.     $span.addClass( 'ideal-'+ ( $this.is(':checkbox') ? 'check' : 'radio' ) )     

    601.     $this.is(':checked') && $span.addClass('checked') // init     

    602.     $span.insertAfter( $this )     

    603.     $this.parent('label').addClass('ideal-radiocheck-label')     

    604.       .attr('onclick', '') // Fix Klick-Label in iOS     

    605.     $this.css({ position: 'absolute', left: '-9999px' }) // ausblenden durch Verschieben left     

    606.     // Events     

    607.     $this.on({     

    608.       change: function( ) {     

    609.         var $this = $(this)     

    610.         if ( $this.is('input[ type="radio"]') ) {     

    611.           $this.parent().siblings('label').find( '.ideal-radio').removeClass('checked')     

    612.         }     

    613.         $span.toggleClass( 'checked', $this .is(':checked') )     

    614.       },     

    615.       focus: function() { $span.addClass('focus') },     

    616.       blur: function() { $span.removeClass('focus') },     

    617.       click: function() { $ (this).trigger('focus') }     

    618.     })     

    619.   })     

    620. }     

    621. ;(function( $ ) {     

    622.   // Browser unterstützt HTML5 mehrere Dateien?     

    623.   var multipleSupport = typeof $('<input/ >')[0].multiple !== 'undefiniert',     

    624.       isIE = /msie/i.test( navigator.userAgent )

    625.   $.fn.idealFile = function() {     

    626.     return this.each (function() {     

    627.       var $file = $(this).addClass('ideal-file'), // die ursprüngliche Dateieingabe     

    628.           // Label, das für den IE-Hack verwendet wird >

      div
    629.  
    630. class

      ="ideal-file-wrap">'),     

    631.           $input = $('<input type="text"  class="ideal-file-filename" />'),     

    632.           // Schaltfläche, die in Nicht-IE-Browsern verwendet wird     

    633.           $button = $('<button type="button" class="ideal-file-upload">Öffnen< ;/Button>'),     

    634.           // Hack für IE     

    635.           $label = $('<label class="ideal-file-upload" for="'+ $file[0].id +'">Openlabel>> Triggerereignisse     

    636.       $file.css({     
    637.         Position: 'absolute',     
    638. left: '-9999px'     
    639.       })     
    640.       $wrap.append( $input, ( isIE ? $label : $button ) ) .insertAfter( $file )     
    641.       // Fokus verhindern     
    642.       $file.attr('tabIndex', -1)     
    643.       $button.attr('tabIndex', -1)     
    644.       $button.click(function () {     
    645.         $file.focus().click() // Dialog öffnen     
    646.       })     
    647.       $file.change(function( ). 🎜 >extract
    648.      

    649.         // alle Dateinamen aus dem Dateiarray     

    650.         if ( multipleSupport ) {     

    651.           

      fileArr = $file[0].files     

    652.           for ( var 

      i = 0

      ,
    653. len
    654.  = 

      fileArr

      .length; i 
    655. <
    656.  

      len

      ; i++ ) {     
    657.             files.push( fileArr[i].name )     

    658.           }     

    659.            Dateiname =" > &      = $file. val().split('\').pop()     

    660.         }     
    661.         $input.val( filename ) // Legen die value     
    662.           .attr( 'title', filename ) / Dateiname in Titelzeile anzeigen     
    663.       })     
    664.       $input.on({     

    665.         focus: function () { $file.trigger('change') },     

    666.         blur: function () { $file.trigger('blur') },     

    667.         keydown: function( e ) {     

    668. if ( 

      e.which
    669.  === 13 ) { // Enter     
    670.             if ( !isIE ) { $file.trigger('click') }     
    671.           } else if ( 
    672. e.which

       === 8 || 

      e.which
    673.  === 46 ) { // Rücktaste & Entf     
    674.             // In einigen Browsern ist der Wert schreibgeschützt     
    675.             // mit diesem Trick entfernen wir die alte Eingabe und fügen      hinzu 🎜>

    676.             $file.replaceWith( $
    677. file

       = $file.val('').clone( true ) )     

    678.             $file.trigger('change' )                 $input.val('')     

    679.           } else if ( 

      e.which
    680.  === 9 ). 🎜> Rückgabe falsch
    681. }
    682. }
    683. })

    684. }) 

    685. }(jQuery)) 

    686. /**    

    687.  * @namespace Errors    

    688.  * @locale en    

    689.  */ 

    690. $.idealforms.errors = { 

    691. erforderlich: „Dies ist erforderlich.“,  

    692. Zahl: „Muss eine Zahl sein.“,  

    693. Ziffern: „Muss eine eindeutige Zahl sein.“ , 

    694. Name: 'Muss mindestens 3 Zeichen lang sein und darf nur Buchstaben enthalten.', 

    695. Benutzername: ' Die Mindestlänge von Der Benutzername ist 5 Zeichen lang und die maximale Länge beträgt 30 Zeichen. Das erste Zeichen des Benutzernamens muss aus Buchstaben, Zahlen und chinesischen Zeichen bestehen. Die maximale Länge beträgt Das chinesische Schriftzeichen besteht aus 21 Zeichen.‘, 

    696. Pass: „Das Passwort muss zwischen 6 und 15 Ziffern sein und mindestens eine Zahl, einen Großbuchstaben und einen Kleinbuchstaben enthalten.“, 

    697. Strongpass: „Muss mindestens 8 Zeichen lang sein und mindestens einen Großbuchstaben und einen Kleinbuchstaben sowie eine Zahl oder ein Sonderzeichen enthalten.“,  

    698. E-Mail: „Muss eine gültige E-Mail-Adresse sein. /em>',  phone: 'Muss eine gültige Mobiltelefonnummer sein <em

    699. >
    700. (Beispiel: 18723101212)

      em>', > zip: 'Muss eine gültige US-Postleitzahl sein ;/em>',

    701. url: ' Muss eine gültige URL sein.

      <em>(z. B. www.google.com)em >',

    702. minChar: 'Muss mindestens /

      stark sein> Zeichen lang.',   minOption: 'Überprüfen Sie mindestens  < stark

      >

    703. {0}
    704. strong> Optionen.',  maxChar: 'Nicht mehr als < ;strong>
    705. {0}
    706. strong> Zeichen lang.' ,  maxOption: 'Nicht mehr als <strong

      >
    707. {0}
    708. < /

      strong> Optionen zulässig.',  Bereich: 'Muss eine Zahl zwischen sein {0} und {1}.',

    709. Datum: 'Muss ein gültiges Datum sein 🎜><
    710. em> (z. B. {0})em>', 

    711.   dob: 'Es muss sich um ein gültiges Geburtsdatum handeln.',     

    712.   exclude: '"{0}" ist nicht verfügbar.',     

    713.   excludeOption: '{0}',     

    714.   equalto: 'Muss derselbe Wert sein wie < stark>"{0}"stark>',     

    715.   Erweiterung: 'Datei(en) müssen eine gültige Erweiterung haben. <em>(z. B. "{0}")em >',     

    716.   ajaxSuccess: '<strong>{0}strong> ist nicht verfügbar.',     

    717.   ajaxError: 'Serverfehler...'     

    718. }     

    719. /**    

    720.  * Alle Standardfilter abrufen    

    721.  * @returns object    

    722.  */     

    723. var getFilters = function() {     

    724.   var filters = {     

    725.     erforderlich: {

    726.       Regex: /.+/,     

    727.       Fehler: $.idealforms.errors.required     

    728.     },     

    729.     Zahl: {     

    730.       regex: function( i, v ) { return !isNaN(v) },     

    731.       Fehler: $.idealforms.errors.number     

    732.     },     

    733.     Ziffern: {     

    734.       regex: /^d+$/,     

    735.       error: $.idealforms.errors.digits     

    736.     },     

    737.     Name: {     

    738.       regex: /^[A-Za-z]{3,}$/,     

    739.       Fehler: $.idealforms.errors.name     

    740.     },     

    741.     Benutzername: {     

    742.       regex: /^[a-z](?=[w.]{4,30}$)w*.?w*$/i,     

    743.       error: $.idealforms.errors.username     

    744.     },     

    745.     pass: {     

    746.       regex: /(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{6,}/,     

    747. Fehler: $.idealforms.errors.pass     

    748.     },     

    749.     strongpass: {     

    750. Regex: /(?=^.{8,}$)((?=.*d)|(?=.*W+))(?![.n])(?=.*[A-Z])(? =.*[a-z]).*$/,     

    751.       error: $.idealforms.errors.strongpass     

    752.     },     

    753.     E-Mail: {     

    754.       regex: /^([a-zA-Z0-9]*[-_.]?[a-zA-Z0-9]+)*@([a-zA-Z0 -9]*[-_]?[a-zA-Z0-9]+)+[\.][A-Za-z]{2,3}([\.][A-Za-z]{ 2})?$/,     

    755.       error: $.idealforms.errors.email     

    756.     },     

    757.     Telefon: {     

    758.       //regex: /^((13[0-9])|(15[0-9])|(17[0-9 ])|(18[0-9]))\d{8}$/,     

    759.       regex: /^(0|86|17951)?(13[0-9 ]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/,     

    760.       Fehler: $ .idealforms.errors.phone     

    761.     },     

    762.     zip: {     

    763.       regex: / ^d{5}$|^d{5}-d{4}$/,     

    764.       error: $.idealforms.errors.zip     

    765.     },     

    766.     url: {     

    767.       regex: /^(?:(ftp|http|https)://) ?(?:[w-]+.)+[a-z]{2,6}([:/?#].*)?$/i,     

    768.       error: $ .idealforms.errors.url     

    769.     },     

    770.     min: {     

    771.       regex: Funktion ( Eingabe, >            

      min
    772.  = 
    773. input

      .userOptions.data.min,                 

      isRadioCheck
    774.  = $input.is('[
    775. type

      ="checkbox"], [type=

      "radio"
    776. ]')     
    777.         if ( isRadioCheck ) {               this.error = $.idealforms.errors.minOption.replace( '{0}', min )     

    778.           return $input.filter(':checked').length 
    779. >

      = min     

    780.         }     

    781.         
    782. this.error

       = $.idealforms.errors.minChar.replace( '{0}', min )     

    783.         Rückgabewert. Länge 
    784. >

      = min     

    785.       }     

    786.     },     
    787. max: {     

    788.       regex: function( input, value) {     

    789.         var $

      input
    790. input

       = input.input,     

    791.             

                  
    792. isRadioCheck
    793.  = $input.is('[

      type="checkbox"], [type

      =
    794. " radio"
    795. ]')     

    796.         if ( isRadioCheck ) {     

    797.           this.error = $.idealforms.errors.maxOption.replace( '{0} ', max )     

    798.           return $input.filter(':checked').length <= max     

    799.         }     

    800.         this.error = $.idealforms.errors.maxChar.replace( '{0}', max )     

    801.         return value.length <= max     

    802.       }     

    803.     },     

    804.     range: {     

    805.       regex: function( input, value) {     

    806.         var range = input.userOptions.data.range,     

    807.             val = +value     

    808. this.error = $.idealforms.errors.range     

    809.           .replace( '{0}', range[0] )     

    810.           .replace( '{1}', range[1] )     

    811.         return val >= range[0] && val <= range[1]     

    812.       }     

    813.     },     

    814. Datum: {     

    815.       regex: function( input, value) {     

    816.         var     

    817.         userFormat =     

    818.           input.userOptions.data && input.userOptions.data.date     

    819. ? input.userOptions.data.date     

    820.             : 'MM/TT/JJJJ', // Standardformat     

    821.         Trennzeichen = /[^mdy]/.exec( userFormat )[0],     

    822.         theFormat = userFormat.split(delimiter),

    823.         theDate = value.split(delimiter),     

    824.         isDate = Funktion( Datum, Format ) {     

    825.           var m, d, y     

    826.           für ( var i = 0len = format.length;  i < len; i++ ) {     

    827.             if ( /m/.test( format[i]) ) m = Datum[i]     

    828.             if ( /d/.test( format[i]) ) d = Datum[i]     

    829.             if ( / y/.test( format[i]) ) y = Datum[i]     

    830.           }     

    831.           return (     

    832.            m > 0 && m < 13 &&     

    833.             y && y.length === 4 &&     

    834.             d > 0 && d <= ( new Date( y, m, 0 ) ).getDate()     

    835.           )     

    836.         }     

    837.         this.error = $.idealforms.errors.date.replace( '{0}', userFormat )     

    838. return isdate (thedate, theformat)

    839. }

    840. },

    841. 🎜>    dob: {     

    842.       regex: function( input, value ) {     

    843.         var     

    844.         
    845. userFormat

       =     

    846.           
    847. input

      .userOptions.data && input.userOptions.data.dob     

    848.             ? input.userOptions.data.dob     

    849.             : 'mm/tt/jjjj', // Standardformat     

    850.         // Simulieren eine Datumseingabe

    851.         
    852. dateInput

       = {     

    853.           input: input.input,     

    854.           userOptions: {     

    855.             data: { date: userFormat }     

    856.           }     

    857.         },

    858.         // Verwenden Sie den internen Datumsfilter, um das Datum zu validieren 🎜>filters
    859. .date.regex( dateInput, value ),     

              // DOB     

    860.         theYear = /d{4}/.exec( value ),     

    861.         maxYear = new Date().getFullYear(), // Current Jahr     

    862.         minYear = maxYear - 100     

    863.         this.error = $.idealforms.errors.dob     

    864.         return isDate && theYear >= minYear && theYear <= maxYear     

    865.       }     

    866.     },     

    867.     exclude: {     

    868.       regex: function( input, value ) {     

    869.         var $ inputinput = input.input,     

    870.             exclude = input.userOptions.data.exclude,

    871.             type="radio"], select')             this.error = isOption

           
    872.           ? $.idealforms.errors.excludeOption.replace( '{0}', value )     

                : 
    873. this.error
    874.  = $.idealforms.errors.exclude.replace ( '{0}', value )     

    875.         return $.inArray( value, exclude ) === -1     

            }     
    876.     },     
    877.     equalto: {     
    878.       regex: function( input, value) {     
    879.         var $
    880. equals
    881.  = $( input.userOptions.data.equalto ),     

    882.             $

      inputinput

       = input.input,     
    883.             name = $equals.attr('name') || $equals.attr('id'),     

    884.             

      isValid = $equals.parents('.ideal-field')     

    885.               .filter(function(){ return $(this).data('ideal-isvalid') === true })     

                    .length     
    886.         if ( !isValid ) { return false }     
    887.         this.error = $.idealforms.errors.equalto.replace( '{0}', name )     

    888.         return $input.val() === $equals.val()     

    889.       }     

    890.     },     

    891.     Erweiterung: {     

    892.       regex: function( input, value ) {     

    893.         nbsp;var Dateieninput.input[0].files || [{ name: value }],     

    894.             >            re = new

       RegExp( '\.'+ extensions.join('|') +'$', 'i' ),     
    895.             gültig = falsch

           
    896.         für ( var i = 0

    897. len
    898.  = 

      files.length; i < len; i++ ) {               valid = re

      .test( files[i].name );     
    899.         }     

              
    900. this.error
    901.  = $.idealforms.errors.extension.replace( '{0}' , extensions.join('", "') )     

    902.         return valid     

            }     
    903.     },     
    904.     ajax: {     
    905.       regex: function( input, value, showOrHideError ) {     
    906.         var 
    907. self
    908.  = 

      this

           
    909.         var $inputinput

       = input. input     
    910.         var userOptions = input

      .userOptions     
    911.         var Name = $input.attr('name')     

    912.         var $

      field = $input.parents('.ideal-field')     

    913.         var 

      valid = false

           
    914.         var customErrors = userOptions

      .errors && userOptions.errors.ajax     
    915.         self.error = {}     

    916.         

      self. error.success = customErrors

       && customErrors.success     
    917.           ? customErrors.success     

    918.           : $.idealforms.errors.ajaxSuccess.replace( '{0}', value )     

    919.         self .error.fail = customErrors && customErrors.error     

    920.           ? customErrors.error     

    921.           : $.idealforms.errors.ajaxError     

    922.         // Eingabename als $_POST[Name] senden     

    923.         var data = {}     

    924.         data[ name ] = $.trim( value )     

    925.         // Vom Benutzer definierte Ajax-Optionen     

    926.         var userAjaxOps = input.userOptions.data .ajax

    927. var ajaxOps = {

    928. Typ: 'post',

    929.           dataType: 'json',     

    930.           data: data,     

    931.           success: function( bzw. {     

    932.           console.log(resp)     

    933.             showOrHideError( self.error.success, true )     

    934.             $input.data({     

    935.              'ideal-ajax-resp': resp,     

    936.              ': selbst .error.success     

    937.             })     

    938.             $input.trigger('change') // zum Zähler aktualisieren     

    939.             $field.removeClass('ajax')     

    940.             // Benutzerdefinierten Erfolgsrückruf ausführen     

    941.             if( userAjaxOps._success ) {     

    942.              userAjaxOps._success( resp, text, xhr )     

    943.             }     

    944.           } ,

    945. Fehler: Funktion (xhr, text, error) {

    946. if (text! == 'abort') {

    947.               showOrHideError( self.error.fail, false )     

    948.               $input.data( 'ideal-ajax-error', self.error.fail )     

    949.               $field.removeClass('ajax')     

    950.               // Benutzerdefinierten Fehlerrückruf ausführen     

    951.               if ( userAjaxOps._error ) {     

    952.                 userAjaxOps. _error( xhr, text, error )     

    953.              }     

    954.             }     

    955.           }     

    956.         }     

    957.         $.extend( ajaxOps, userAjaxOps )     

    958.         // Init  .  

    959.         $input.removeData('ideal-ajax-error')     

    960.         $input.removeData('ideal-ajax-resp')     

    961.         $field.addClass('ajax')     

    962.         // Anfrage ausführen und speichern, um sie abbrechen zu können     

    963.        # }     

    964.     }     

    965.   }     

    966.   Rückgabefilter     

    967. }     

    968. $

      .idealforms.flags

       = {     
    969.   noerror: function (i) {     
    970.     i.parent().siblings('.ideal-error').hide()     

    971.   },     

    972.   noicons: function (i) {     

    973.     i.siblings('.ideal-icon-valid, .ideal-icon-invalid').hide()     

    974.   },     

    975.   novalidicon: function (i) {     

    976.     i.siblings('.ideal -icon-valid').hide()     

    977.   },     

    978.   noinvalidicon: function (i) {     

    979.     i.siblings('.ideal-icon-invalid').hide()     

    980.   },     

    981.   noclass: Funktion (i) {     

    982.     i.parents('.ideal-field').removeClass('valid invalid')     

    983.   },

    984.   novalidclass: function (i) {     

    985.     i.parents('.ideal-field').removeClass('valid')     

    986.   },     

    987.   noinvalidclass: function (i) {     

    988.     i.parents('. ideal-field').removeClass('invalid')     

    989.   }     

    990. }     

    991. /*    

    992.  * Ideales Formular-Plugin    

    993.  */     

    994. var _defaults = {     

    995.   Eingaben: {},     

    996.   customFilters: {},     

    997.   customFlags: {},     

    998.   globalFlags: '',     

    999.   onSuccess : function(e) { alert('Thank you...') },     

    1000.   onFail: function() { alert('Invalid!') },     

    1001.   responsiveAt: 'auto',     

    1002.   disableCustom: ''     

    1003. }     

    1004. // Konstruktor     

    1005. var IdealForms = Funktion( Element, Optionen ) {     

    1006.   var self = this     

    1007.   self.$form = $( element )     

    1008.   self.opts = $.extend( {}, _defaults, options )     

    1009.   self.$tabs = self.$form.find('section')     

    1010.   // Lokalisierte Filter festlegen     

    1011.   $. extension( $.idealforms.filters, getFilters() )     

    1012.   self._init()     

    1013. }     

    1014. // Plugin     

    1015. $.fn.idealforms = Funktion( Optionen ) {     

    1016.   return this.each(function() {     

    1017.     if ( !$.data( this, 'idealforms' ) ) {     

    1018.       $.data( this, 'idealforms', new IdealForms( this, options ) )     

    1019.     }     

    1020.   })     

    1021. }     

    1022. // WENIGER Variablen abrufen     

    1023. var LessVars = {     

    1024.   fieldWidth: Utils.getLessVar( 'ideal-field-width', 'width' )     

    1025. }     

    1026. /*    

    1027.  * Private Methoden    

    1028.  */     

    1029. $.extend ( IdealForms.prototype, {     

    1030.   _init: function() {     

    1031.     var self = this     

    1032.     var o = self.opts     

    1033.     var formElements = self._getFormElements()     

    1034.     self.$form.css( 'visibility', 'visible' )     

    1035.       .addClass('ideal-form')     

    1036.       .attr( 'novalidate', 'novalidate' ) // HTML5-Validierung deaktivieren     

    1037.     // Markieren     

    1038.     formElements.inputs     

    1039.       .add( formElements.headings )     

    1040.       .add( formElements.separators )     

    1041.       .each(function(){ self._doMarkup( $(this) ) })     

    1042.     // Registerkarten generieren     

    1043.     if ( self.$tabs.length ) {     

    1044.       var $tabContainer = $('<div class="ideal-wrap ideal-tabs ideal-full-width"/>')     

    1045.       self.$form.prepend( $tabContainer )     

    1046.       self.$tabs.idealTabs( $tabContainer )     

    1047.     }

    1048.     // Datumsauswahl immer unter der Eingabe anzeigen     

    1049.     if ( jQuery.ui ) {     

    1050.       $.datepicker._checkOffset = function( a,b,c ) { return b }     

    1051.     }     

    1052. form.find('[data-ideal]').each(function() {     
    1053.       var 
    1054. userInput

       = 

      o
    1055. .inputs[ this.name ]     
    1056.       o.inputs[ this.name ] = userInput || { filters: $(this).data('ideal') }     
    1057.     })     

    1058.    // Responsive     
    1059.     if ( o.responsiveAt ) {     
    1060.       $(window).resize(function(){ self._responsive() })     
    1061.       self._responsive()     
    1062. }     
    1063.     // Form events     
    1064.     self.$form.on({     
    1065.       keydown : function( e ) {     
    1066.         / Senden beim Drücken der Eingabetaste verhindern     
    1067.         // Textbereiche ausschließen  .   
    1068.         if ( 
    1069. e.which

       === 13 && e.target.nodeName !== 'TEXTAREA' ) {     

    1070.           e.preventDefault()

    1071.         }     

    1072.       },     
    1073.       submit: function( e ) {     
    1074. if (! Self.isvalid ()) {
    1075. e.preventDefault ()
    1076. o.onfail ()     
    1077.           self.focusFirstInvalid()     
    1078.         } else {     
    1079.           o .onSuccess( e )     
    1080.         }     
    1081.       }     

    1082.     })     

    1083.     self._adjust()     

    1084.     self._attachEvents()     

    1085.     self.fresh() / Neu starten     

    1086.   },     

    1087.   _getFormElements: function() {     

    1088.     return {     

    1089.       inputs: this.$form.find('input, select , textarea, :button'),     

    1090.       labels: this.$form.find('div > label:first-child '),     

    1091.       text: this.$form.find('input:not([type="checkbox"], [ type="radio"], [type="submit"]), textarea'),     

    1092.       select: this.$form.find('select'),     

    1093.       radiocheck: this.$form.find('input[type="radio"], input[type="checkbox"]'),     

    1094.       Schaltflächen: this.$form.find(':button'),     

    1095.       Datei: this.$form.find('input[type="Datei "]'),     

    1096.       Überschriften: this.$form.find('h1, h2, h3, h4, h5, h6'),     

    1097.       Trennzeichen: this.$form.find('hr'),     

    1098.       hidden: this.$form.find('input:hidden')     

    1099.     }     

    1100.   },     

    1101.   _getUserInputs: function() {     

    1102.     return this.$form.find('[name="'+ Utils.getKeys( this.opts.inputs ).join('"], [name="') +'"]')     

    1103.   },     

    1104.   _getTab: function( nameOrIdx ) {     

    1105.     var self = this     

    1106.     var isNumber  = !isNaN( nameOrIdx )     

    1107.     if ( isNumber ) {     

    1108.       return self.$tabs.eq( nameOrIdx )     

    1109.     }     

    1110.     return self.$tabs.filter(function() {     

    1111.       var re = new RegExp( nameOrIdx, 'i' )     

    1112.       return re.test( nbsp;$(this).data('ideal- tabs-content-name') )     

    1113.     })     

    1114.   },     

    1115.   _getCurrentTabIdx: function() {     

    1116.     return this.$tabs.index( this.$form.find('.ideal-tabs-content:visible') )     

    1117.   },     

    1118.   _updateTabsCounter: function() {     

    1119.     var self = this     

    1120.     self.$tabs.each(function( i ) {     

    1121.       var invalid = self.getInvalidInTab( i ) .length     

    1122.       self.$tabs.updateCounter( i, invalid )     

    1123.     })     

    1124.   },     

    1125.   _adjust: function() {     

    1126.     var self = this     

    1127.     var o = self.opts     

    1128.     var formElements = self._getFormElements()     

    1129.     var curTab = self._getCurrentTabIdx()    

    1130.     // Autocomplete verursacht einige Probleme...     

    1131.     formElements.inputs.attr('autocomplete', 'off')     

    1132.  🎜>    // Beschriftungen anpassen     

    1133.     var 

      labels
    1134.  = 
    1135. formElements

      .labels     

    1136.     Beschriftungen. removeAttr('style').width( Utils.getMaxWidth( labels) )         // Überschriften und Trennzeichen anpassen     

    1137.     if ( self. $tabs.length ) {     

    1138.       this.$tabs.each(function(){     

    1139.         $( this ).find('. ideal-heading:first').addClass('first-child')     

    1140.       })     

    1141.     } else {     

    1142.       self.$form.find('.ideal-heading:first').addClass('first-child')     

    1143.     }     

    1144.     self._setDatepicker()     

    1145.     // Berechnung, Tabs ausblenden abgeschlossen     

    1146.     if ( self.$tabs.length ) {     

    1147.       self.$tabs.hide()     

    1148.       self.switchTab( curTab )     

    1149.     }     

    1150.   },     

    1151.   _setDatepicker: function() {     

    1152.     var 

      o
    1153.  = 
    1154. this

      .opts     

    1155.     var $datepicker = this.$form.find( 'input.datepicker')     

    1156.     if ( jQuery.ui && $datepicker.length ) {           $datepicker.each(function() {     

    1157.         var userInput = o.inputs[ this.name ]     

    1158.         var Daten = userInput && userInput.data && userInput.data.date     

    1159.         var Format = Daten ? data.replace( 'yyyy', 'yy' ) : 'mm/dd/yy'     

    1160.         $(this).datepicker({     

    1161.           dateFormat: format,     

    1162.           vorAnzeigen: Funktion( Eingabe) {     

    1163.             $( input ).addClass ('open')     

    1164.           },     

    1165.           onChangeMonthYear: function() {     

    1166. // Hack zur Behebung von IE9 nicht die Größe

    1167. var $ this = $ (this)

    1168. 🎜> var

      w
    1169. = $ this.outerwidth () //
    1170. cache

      zuerst! 🎜>

    1171.               $this.datepicker('widget').css( 'width', w )     
    1172.             }, 1)     
    1173.           },     
    1174.           onClose: function() { $(this).removeClass('open') }     
    1175.         })
    1176.       })     
    1177.       // Breite anpassen     
    1178.       $datepicker.on('focus keyup ', function() {     
    1179.         var t = $(this), w = 

      t
    1180. .outerWidth( )     
    1181.         t.datepicker('widget').css( 'width', w )     
    1182.       })     
    1183.       $datepicker.parent().siblings('.ideal-error').addClass('hidden')     
    1184.     }     
    1185.   },     
    1186.   _doMarkup: function( $element ) {     
    1187.     var o = 

      this
    1188. .opts     
    1189.     var elementType = 

      Utils
    1190. .getIdealType( $element )     
    1191.     // Validierungselemente     
    1192.     var $field = $('<span class="ideal -field"/>')     

    1193.     var $error = $('< span class="ideal-error" />')     

    1194.     var $valid = $('<i class="ideal-icon ideal-icon-valid" />')     

    1195.     var $invalid = $('<i class="ideal-icon ideal-icon-invalid"/>')     

    1196.       . click(function(){     

    1197.         $(this).parent().find('input:first, textarea, select').focus()     

    1198.       })     

    1199.     // Grundlegendes Markup     

    1200.     $element.closest('div').addClass('ideal- wrap')     

    1201.       .children('label:first-child').addClass('ideal-label')     

    1202.     var idealElements = {     

    1203.       _defaultInput: function() {     

    1204.         $element.wrapAll( $field ).after( $valid , $invalid )     

    1205.           .parent().after( $error )     

    1206.       },     

    1207.         // Radios und Schecks mehr als einmal verpacken.   

    1208.         var 

      isWrapped

       = $element.parents('.ideal-field').length     
    1209.         if ( !isWrapped ) {     
    1210.           $element.parent() .nextAll().andSelf().wrapAll( $field.addClass('ideal-radiocheck') )     

    1211.           $element.parents('.ideal-field').append( $valid, $invalid ).after( $error )     

    1212.         }     

    1213.         if ( !/radiocheck/.test( o.disableCustom ) ) {     

    1214.           $element.idealRadioCheck()     

    1215.         }     

    1216.       },     

    1217.       select: function() {     

    1218.         idealElements._defaultInput()     

    1219.         if ( !/select/.test( o.disableCustom ) ) {     

    1220.           $element.idealSelect()     

    1221.         }     

    1222.       },     

    1223.       file: function() {     

    1224.         idealElements ._defaultInput()     

    1225.         if ( !/file/.test( o.disableCustom ) ) {     

    1226.           $element.idealFile()     

    1227.         }     

    1228.       },     

    1229.       Taste: function() {     

    1230.         if ( !/button/.test( o.disableCustom ) ) {     

    1231.           $element.addClass('ideal-button')     

    1232.         }     

    1233.       },     

    1234.       hidden: function() {     

    1235.         $element.closest('div').addClass('ideal-hidden')     

    1236.       },     

    1237.       heading: function() {     

    1238.         $element.closest('div').addClass('ideal-full-width')     

    1239.         $element.parent( ).children().wrapAll('<span class="ideal-heading"/>')     

    1240.       },     

    1241.       Trennzeichen: function() {     

    1242.        .closest('div').addClass('ideal-full-width')     

    1243.         $element.wrapAll('<div class="ideal-separator"/>')     

    1244.       }     

    1245.     }     

    1246.     // Markup für den aktuellen Elementtyp generieren idealElements[ elementType ]() : $.noop()     

    1247.     $error.add( $valid ).add( $invalid ).hide() // Neu starten     

    1248.   },     

    1249.   /** Validiert eine Eingabe und zeigt oder versteckt Fehler und Symbol    

    1250.    * @memberOf Actions    

    1251.    * @param {object} $input jQuery-Objekt    

    1252.    * @param {string} e Das JavaScript-Ereignis    

    1253.    */     

    1254.   _validate: function( $input, e ) {     

    1255.     var 

      self
    1256.  = 
    1257. this

               var 

      o
    1258. this

      .opts     

    1259.     var userOptions = o.inputs[ $input.attr('name') ]     

    1260.     var userFilters = userOptions.filters && userOptions.filters.split(/s/)     

    1261.     var name = $input.attr(' name')     

    1262.     var value = $input.val()     

    1263.     var ajaxRequest = $.idealforms.ajaxRequests[ name ]     

    1264.     var isRadioCheck = $input.is('[type="checkbox "], [type="radio"]')     

    1265.     var inputData = {     

    1266.       // If is radio oder self.$form.find('[

      name
    1267. =
    1268. "' + name + '"

      ]') : $input,           userOptions : userOptions     

    1269.     }     

    1270.     // Validierungselemente     

    1271.     var $

      Feld
    1272.  = $input.parents('.ideal-field')     
    1273.     var $

      error
    1274.  = $field.siblings('.ideal-error')     
    1275.     var $

      ungültig
    1276.  = 
    1277. isRadioCheck

                 ? $input.parent().siblings('.ideal-icon-invalid')     

    1278.       : $input.siblings('.ideal-icon-invalid')     

    1279.     var $

      gültig
    1280.  = 
    1281. isRadioCheck

                 ? $input.parent().siblings('.ideal-icon-valid')     

    1282.       : $input.siblings('.ideal-icon-valid')     

    1283.     function resetError() {     

    1284.       $field.removeClass('valid invalid').removeData('ideal-isvalid')     

    1285.       $error.add( $invalid ).add( $valid ).hide()     

    1286.     }     

    1287.     Funktion showOrHideError ( Fehler, gültig ) {     

    1288.       resetError()     

    1289.       gültig ? $valid.show() : $invalid.show()     

    1290.       $field.addClass( valid ? 'valid' : 'invalid' )     

    1291.       $field.data( 'ideal-isvalid', valid )     

    1292.       if ( !valid ) {     

    1293.         $error.html( Fehler ).toggle( $field.is('.ideal-field-focus') )     

    1294.       }     

    1295.     }     

    1296. // Verhindern Sie die Validierung beim Eingeben, jedoch nicht neuer Zeichen

    1297. // Dies wird hauptsächlich dazu dient, mehrere AJAX -Anforderungen zu verhindern

    1298.     var oldValue = $input.data('ideal-value') || 0     

    1299.     $input.data( 'ideal-value', value )     

    1300.     if ( e.type = == 'keyup' && value === oldValue ) { return false }     

    1301.     // Validieren     

    1302.     if ( userFilters ) {     

    1303.       $.each( userFilters, function( i, filter ) {     

    1304.         var theFilter = $.idealforms.filters[ filter ]     

    1305.         var customError = userOptions.errors && userOptions.errors[ filter ]     

    1306.         var Fehler = ''     

    1307.         // Wenn das Feld leer und nicht erforderlich ist     

    1308.         if ( !value && filter !== ‘required’ )  return false

    1309.         }     

    1310.         if ( theFilter ) {     

    1311.           // Ajax abbrechen falls es vorhanden ist eine ausstehende Anfrage Anfrage. abort()     

    1312.             $field.removeClass('ajax')     

    1313.           }     

    1314.           / / AJAX     

    1315.           if ( 
    1316. filter

       === 'ajax' ) {     

    1317.  nbsp;           showOrHideError( error, false) // auf ungültig setzen, bis die Antwort zurückkommt     

    1318.             $error.hide()      

    1319.             if ( 

      z.B .Type
    1320. === 'KeyUp') {
    1321. theFilter.regex (inputData, Wert, ShoworhideError) // Fährt den AJAX -Rückruf

    1322. aus.

                  } else {     

    1323.               var 

      ajaxError
    1324.  = $input.data('ideal-ajax-error')     
    1325.               if ( ajaxError ) {     

    1326.               showOrHideError( ajaxError, $input.data('ideal-ajax-resp') || fal se )     

    1327.               }     

    1328.             }     

    1329.           }     

    1330.           // Alle anderen Filter derFilter. regex ) && theFilter.regex.test( value ) ||     

    1331.                      >Fehler

       = 

      customError
    1332.  || theFilter.error // Assign-Fehler nach dem Aufruf von „regex()“    { return false }     
    1333.           }     

    1334.         }     
    1335.       })     
    1336.     }     

    1337.     // Zurücksetzen, wenn keine Filter vorhanden sind     
    1338.     else {     
    1339. resetError()     
    1340.     }     
    1341.     // Flags     
    1342.     var 
    1343. Flags

       = (function(){     

    1344.       var 

      f
    1345.  = 
    1346. userOptions

      .flags && userOptions.flags.split(' ') || [ ]     

    1347.       if ( o.globalFlags ) {     

    1348.         $.each( o.globalFlags.split(' '), function( i, v ) { f.push(v) })     

    1349.       }     

    1350.       return f     

    1351. }())     
    1352.     if ( flags.length ) {     

    1353.       $.each(flags, function( i,f ) {     
    1354.         var 
    1355. theFlag

       = $.idealforms.flags[f]     

    1356.         if ( theFlag ) { theFlag( $input, e .type ) }     

    1357.       })     

    1358.     }     

    1359.     // Aktualisierungszähler     

    1360.     if ( self.$tabs.length ) {     

    1361.       self._updateTabsCounter( self._getCurrentTabIdx() )     

    1362.     }     

    1363.   },     

    1364.   _attachEvents: function() {     

    1365.     var self = this     

    1366.     self._getUserInputs().on('keyup change focus blur', function(e) {     

    1367.       var $this = $(this)

    1368.       var $field = $this.parents('.ideal-field')     

    1369.       var  isFile = $this.is('input[type=file]')     

    1370.       // Trigger on change if Typ=Datei cuz benutzerdefinierte Datei     

    1371.       // deaktiviert den Fokus auf die Eingabe der ursprünglichen Datei (tabIndex = -1)     

    1372.       if ( e.type === 'focus' || isFile && e.type === 'change' ) {     

    1373.         $field.addClass('ideal-field-focus')     

    1374.       }     

    1375.       if ( e.type === 'blur' ) {     

    1376.         $field.removeClass('ideal-field-focus')     

    1377.       }     

    1378.       self._validate( $this, e )     

    1379.     })     

    1380.   },     

    1381.   _responsive: function() {     

    1382.     var formElements = this._getFormElements()     

    1383.     var maxWidth = LessVars.fieldWidth + formElements.labels.outerWidth()     

    1384.     var $emptyLabel = formElements.labels.filter(function() {     

    1385.       return $(this).html () === ' '     

    1386.     })     

    1387.     var $customSelect = dies .$form.find('.ideal-select')     

    1388.     this.opts.responsiveAt === 'auto'     

    1389.       ? this.$form.toggleClass( 'stack', this.$form.width() < maxWidth )     

    1390.       : this. $form.toggleClass( 'stack', $(window).width() < this.opts.responsiveAt )     

    1391.     var isStack = this.$form.is('.stack')     

    1392.     $emptyLabel.toggle( !isStack )     

    1393.     $customSelect.trigger( isStack ? 'list' : 'menu' )     

    1394.     // DatePicker ausblenden     

    1395.     var $datePicker = this.$form.find('input.hasDatepicker')     

    1396.     if ( $datePicker.length ) { $datePicker.datepicker('hide') }     

    1397.   }     

    1398. })     

    1399. /*    

    1400.  * Öffentliche Methoden    

    1401.  */     

    1402. $.extend( IdealForms.prototype , {     

    1403.   getInvalid: function() {     

    1404.     return this.$form.find('.ideal-field').filter( function() {     

    1405.       return $(this).data('ideal-isvalid') === false     

    1406.     })     

    1407.   },     

    1408.   getInvalidInTab: function( nameOrIdx ) {     

    1409.     return this._getTab( nameOrIdx ) .find('.ideal-field').filter(function() {     

    1410.       return $(this).data('ideal-isvalid') === false     

    1411.     })     

    1412.   },     

    1413.   isValid: function() {     

    1414.     return !this.getInvalid().length     

    1415.   },     

    1416.   isValidField: function( field ) {     

    1417.     var $input = Utils.getByNameOrId( field )     

    1418.     return $input.parents(' .ideal-field').data('ideal-isvalid') === true     

    1419.   },     

    1420.   focusFirst: function() {     

    1421.     if ( this.$tabs.length ) {     

    1422.       this.$tabs.filter(':visible')     

    1423.         .find('.ideal-field:first')     

    1424.         .find('input:first, select, textarea').focus()

    1425.     } else {     

    1426.       this.$form.find('.ideal-field:first')     

    1427.         .find('input:first, select, textarea').focus()     

    1428.     }     

    1429.     return this     

    1430.   },     

    1431.   focusFirstInvalid: function() {     

    1432.     var $first = this.getInvalid().first().find('input:first, select, textarea')     

    1433.     var tabName = $first.parents('.ideal-tabs-content').data('ideal-tabs-content-name')     

    1434.     if ( this.$tabs.length ) {     

    1435.       this.switchTab( tabName )     

    1436.     }     

    1437.     $first.focus()

    1438.     dieses zurückgeben     

    1439.   },     

    1440.   switchTab: function( nameOrIdx ) {     

    1441.     this.$tabs.switchTab( nameOrIdx )     

    1442.     return this     

    1443.   },     

    1444.   nextTab: function() {     

    1445.     this.$tabs. nextTab()     

    1446.     return this     

    1447.   },     

    1448.   prevTab: function() {     

    1449.     this.$tabs.prevTab()     

    1450.     return this     

    1451.   },     

    1452.   firstTab: function() {     

    1453.     this.$tabs.firstTab()     

    1454.     return this     

    1455.   },     

    1456.   lastTab: function() {     

    1457.     this.$tabs.lastTab( )     

    1458.     return this     

    1459.   },     

    1460.   fresh: function() {     

    1461.     this._getUserInputs().change().parents('.ideal-field')     

    1462.       .removeClass('valid invalid')     

    1463.     dieses zurückgeben     

    1464.   },     

    1465.   freshFields: function( fields ) {     

    1466.     fields = Utils.convertToArray( fields )     

    1467.     $.each( fields, function( i ) {

    1468.       var $input = Utils.getByNameOrId( fields[ i ] )     

    1469.       $ input.change().parents('.ideal-field').removeClass('valid invalid')     

    1470.     })     

    1471.     return this     

    1472.   },     

    1473.   reload: function() {     

    1474.     this._adjust()

    1475.     this._attachEvents()     

    1476.     return this     

    1477.   },     

    1478.   reset: function() {     

    1479.     var formElements = this._getFormElements()     

    1480.     formElements.text.val('') // Texteingaben     

    1481.     formElements.radiocheck.removeAttr('checked') // radio & check     

    1482.     // Auswählen und benutzerdefinierte Auswahl     

    1483.     formElements.select.find('option').first().prop( 'selected', true )

    1484.     this.$form.find('.ideal-select').trigger('reset')     

    1485.     if ( this.$ tabs.length ) { this.firstTab() }     

    1486.     this.focusFirst().fresh()     

    1487.     return this     

    1488.   },     

    1489.   resetFields: function( fields ) {     

    1490.     fields = Utils.convertToArray( fields )     

    1491.     var formElements = this._getFormElements()     

    1492.     $.each( fields, function( i, v ) {     

    1493.       var $ input = Utils.getByNameOrId( v )     

    1494.       var type = Utils.getIdealType ( $input )     

    1495.       if ( type === 'text' || type === 'file' ) {     

    1496.         $input.val('')     

    1497.       }     

    1498.       if ( Typ === 'radiocheck' ) {     

    1499.         $input.removeAttr('checked') // radio & check     

    1500.       }     

    1501.       if ( type === 'select' ) {     

    1502.         $input.find('option'). first().prop( 'selected', true )     

    1503.         $input.next('.ideal-select').trigger('reset')     

    1504.       }     

    1505.       $input.change()     

    1506.     })     

    1507. this.freshFields( Felder )     

    1508.     return this     

    1509.   },     

    1510.   toggleFields: function( Felder ) {     

    1511.     Felder = Utils.convertToArray( Felder )     

    1512.     var self = this     

    1513.     var $fields = Utils.getFieldsFromArray( fields )     

    1514.     $fields.each(function() {     

    1515.       var $this = $(this)     

    1516.       var name = $this.attr('name') || $this.attr('id')     

    1517.       var input = self.opts.inputs[ name ]     

    1518.       var filters = input && input.filters     

    1519.       var dataFilters = $this. data('ideal-filters') || ''     

    1520.       $this.data( 'ideal-filters', filters )     

    1521.       $this.closest('.ideal-wrap' ).toggle()     

    1522.       self.setFieldOptions( name, { filters: dataFilters } )     

    1523.     })     

    1524.     dieses zurückgeben     

    1525.   },     

    1526.   setOptions: function( options ) {     

    1527.     $.extend( true, this.opts, options )     

    1528.     this.reload().fresh()     

    1529.  $.extend( true, this.opts.inputs[ name ], options )     

    1530.     this.reload().freshFields([ name ])     

    1531.     dieses zurückgeben     

    1532.   },     

    1533.   addFields: function( fields ) {     

    1534. fields
    1535.  = 
    1536. Utils

      .convertToArray( fields )     

    1537.     var 

      self
    1538.  = 
    1539. this

               // Speichern Sie die Namen aller Eingaben im Array     

    1540.     // um Methoden zu verwenden, die Namen annehmen, z. fresh()         var 

      allNames
    1541.  = []     
    1542.     // Eine Eingabe zum DOM hinzufügen     
    1543.     function add( ops ) {     
    1544.       var 

      name
    1545.  = 
    1546. ops

      .name     

    1547.  nbsp;     var 

      userOptions
    1548.  = {     
    1549.         filters: ops.filters || '',     

    1550.         data: ops.data || {},     
    1551.         Fehler: ops.errors || {},     

    1552.         flags: ops.flags || ''     

    1553.       }     

    1554.       var 

      label
    1555.  = 
    1556. ops

      .label || ''     

    1557.       var 

      type
    1558.  = 
    1559. ops

      .type           var 

      list
    1560.  = 
    1561. ops

      .list || []           var 

      placeholder
    1562.  = 
    1563. ops

      .placeholder || ''           var 

      value
    1564.  = 
    1565. ops

      .value || ''           var $

      field
    1566.  = $('
    1567. <

      div> '+     

    1568.           '<label>'+ label +':

      label
    1569. >

      '+               Utils.makeInput( name, value, type, list, placeholder ) +     

    1570.         'div>')     

    1571.       var $ input = $field.find('input, select, textarea, :button')     

    1572.       // Eingaben mit Filtern zur Liste hinzufügen     

    1573.       // von zu validierenden Benutzereingaben     

    1574.       if ( userOptions.filters ) { self.opts.inputs[ name ] = userOptions }     

    1575. self._domarkup ($ input)

    1576. // In DOM

    1577. if (ops.addafter) {

    1578. einfügen {
    1579.         $field.insertAfter(     

    1580.           $( Utils.getByNameOrId( ops.addAfter ) ).parents('.ideal-wrap')     

    1581.         )     

    1582.       } else if ( ops.addBefore ) {     

    1583.         $field.insertBefor e(

    1584.           $(Utils.getByNameOrId( ops.addBefore ))     

    1585.           .parents('.ideal-wrap')     

    1586.         )     

    1587.       } else if ( ops.appendToTab ) {     

    1588.         $field.insertAfter(     

    1589.           self._getTab( ops.appendToTab ).find('.ideal-wrap:last-child')     

    1590.         )     

    1591.       } else {     

    1592.         $field.insertAfter( self.$form.find('.ideal-wrap').last() )     

    1593. }

    1594. // Der aktuelle Feldname in die Liste der Namen

    1595. Allnames.push (Name)

      hinzufügen

    1596.     }     

    1597.     // Jede Eingabe durchlaufen     

    1598.     $.each( fields, function( i, ops ) { add( ops ) })     

    1599.     self.reload()     

    1600.     self.freshFields( allNames )     

    1601.     self._responsive()     

    1602.     return this     

    1603.   },     

    1604.   removeFields: function( fields ) {     

          fields

       = 
    1605. Utils
    1606. .convertToArray( fields )     

          var $fields

       = 
    1607. Utils
    1608. .getFieldsFromArray( fields )     

    1609.     $fields.parents('.ideal-wrap').remove ()     

    1610.     this.reload()     

    1611.     return this     

    1612.   }     

      })     
    1613. }( jQuery, Fenster, Dokument ))

    【Verwandte Empfehlungen】

    1. Kostenloses HTML5-Video-Tutorial

    2. Detaillierte Erläuterung der lokalen HTML5-Datenbankinstanz

    3. Lernen Sie, wie Sie ein H5-Mikroszenario implementieren

    4 . Detaillierte Erläuterung der benutzerdefinierten Attributdaten von H5-*

    5 H5-Codebeispiel für die Implementierung von Textfeld-Eingabeaufforderungen

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel dafür, wie H5 die automatische Überprüfung der Benutzerregistrierung durchführt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn