JQuery 3 - Form එකක් validate කිරීම

form එකක් submit කරද්දි කොහොමද ඒක JQuery වලින් validate කරන්නෙ කියලා මේ පහල code එකෙන් විස්තර කරන්නම්.

<html>                                                                
<head>                                                                 
  <script type="text/javascript" src="jquery.js"></script>         
  <script type="text/javascript">                                        
     $(document).ready(function() {

        $("#test_form").submit(function (){
           var user_name = $('#uname').val();
           var password = $('#pwd').val();
           var sex = $('input:radio[name=sex]:checked').val();                 
           var status = $('input:checkbox[name=status]:checked').val();   
           var university = $('#university option:selected').val();

           $('.error_msg').hide();                

           var error = false;

           var message_div = '<div class="error_msg" style="color: #ff3333;" ></div>';               

           if(user_name.length == 0){          
              $('#uname').after(message_div);
              $('#uname').next().html('Please enter a user name');
              error = true;
           }
           if(password.length == 0){               
              $('#pwd').after(message_div);
              $('#pwd').next().html('Please enter a Password');                  
              error = true;
           }
           if(!sex){
              $('input[value=male]').before(message_div);
              $('input[value=male]').prev().html('Please select Sex');
              error = true;
           }
           if(!status){
              $('input[value=student]').before(message_div);
              $('input[value=student]').prev().html('Please check a Status');
              error = true;
           }
           if(university == 'null'){
              $('#university').after(message_div);
              $('#university').next().html('Please select a Universitye');
              error = true;
           }   

           if(error) return false;      

        });
    });                              
  </script>                                                              
</head>                                                                
<body> 
  <fieldset>                                                                
     <legend>Test Form </legend>
     <form id="test_form" method="post">
        Name <input type="text" name="uname" id="uname"/><br/><br/>
        Password <input type="password" name="pwd" id="pwd"/><br/><br/>
        <input type="radio" name="sex" value="male" /> Male<br />
        <input type="radio" name="sex" value="female" /> Female<br/><br/>
        <input type="checkbox" name="status" value="student" /> Student<br/>
        <input type="checkbox" name="status" value="employer" /> Employer<br/><br/>
        University
        <select id="university">
           <option value="null" selected="selected">Select University</option>
           <option value="uoc">Colombo</option>
           <option value="uom">Moratuwa</option>
           <option value="uop">Peradeniya</option>
           <option value="uor">Ruhuna</option>
        </select><br/><br/>  
        <input type="submit" value="Submit Form"/>
     </form>
  </fieldset>
</body>
</html>

(මේක ලස්සන නෑ ඉතින්. වෙන වැඩේ විතරයි හිතුවෙ. ලස්සන කලාම වැඩේ තේරෙන්නෙ නෑ. ඕන ටික අඩුම විදිහට ලියලා තියෙන්නෙ. කට්ටිය හිතෙන විදිහට style කරලා ගන්න. මුලින්ම යට තියෙන html form එක තේරෙනවැයි කියලා මම හිතනවා. ඒවත් කියලා දෙන්න බෑ ඉතින්. මේක බලන්න කලින් කලින් jquery ගැන ලියලා තියෙන මුල ඒවා ටිකත් බලලා එනවනම් තමා හොද.)

  1. $("#test_form").submit(function (){ පේලියෙන් කියන්නෙ test_form කියන id එක තියෙන form එක submit කරන කොට වැඩ කරන function එක ගැන. ඔය ඇරලා තියෙන් { වරහන ඇතුලෙ තමා ඒක ලියන්නෙ. (form එකක් විතරක් තියෙන නිසා $("form").submit(function (){ කියලත් ලියන්න පුලුවන්.)
  2. ඊට පස්සෙ මුලින්ම කරන්නෙ form එකේ field වල තියෙන value ටික ගන්න එක.
    • var user_name = $('#uname').val(); එකෙන් කියන්නෙ uname කියන id එක තියෙන එකේ value එක ගන්න කියලා. ඒක අරගෙන user_name කියලා varible එකක්ට දාගන්නවා. var password = $('#pwd').val(); එකෙන් කරන්නෙත් ඒවගේම එකක්.
    • var sex = $('input:radio[name=sex]:checked').val(); කියන එකේ input:radio කියන එකෙන් මේ පිටුවෙ තියෙන radio button ඔක්කොම ගැන කියවෙනවා. එකෙන් name එක sex වන එකේ value එක ගන්න එක තමා මේ පේලියෙන් කරන්නෙ. (මේ පිටුවටම තියෙන්නෙ එක radio button සෙට් එකක් නිසා $('input:redio').val(); කියලා ලියන්නත් පුලුවන්. තේරම් කරන්න ඕන නිසයි ලිව්වෙ. )
    • var status = $('input:checkbox[name=status]:checked').val(); එකත් ඉතින් ඉස්සල්ලා radio button කතන්දරයම තමා. එකෙන් checkbox වල value ගන්නවා.
    • var university = $('#university option:selected').val(); මේකෙ university කියලා id එක තියෙන select එකෙන් select කරලා තියෙන option එකේ value එක ගන්නවා.
    එන value මොනාද කියලා alert(user_name); වගේ කරලා බලන්න පුලුවන්.
  1. $('.error_msg').remove(); එකෙන් .error_msg කියන class එක තියෙන ඔක්කොම මකලා දානවා. ඒකෙ වැදගත් කම පස්සෙ තේරෙයි. var error = false; එකත් පස්සෙ තේරෙයි.
  2. var message_div = '<div class="error_msg" style="color: #ff3333;" >'+'</div>'; කියන එකෙන් අපි අපේ වැරදි පණිවිඩ error message) පෙන්නන්න div එකක් හදා ගන්නවා.
  3. if(user_name.length == 0){ එකෙන් user_name කියන variable එකෙ දිග බලනවා. එකෙ මුකුත් නැත්නම් ඒක 0 වට සමාන වෙනවා. එහෙම වුනාම කරන්නෙ මොනවද කියලා සගල වරහන් ඇතුලෙ තියෙන්නෙ.
  4. $('#uname').after(message_div); එකෙන් කියන්නෙ uname කියලා id එක තියන එකට පස්සෙ අපි කලින් හදාගත්තු div එක දාන්න කියලා. එතකොට uname කියන text field එක අවට මෙහෙම වෙනස් වෙනවා
  5. Name <input type="text" name="uname" id="uname"/>
     <div class="error_msg" style="color: #ff3333;" ></div>
    
  6. $('#uname').next().html('Please enter a user name'); එකේ .next() කියන එකෙන් uname එකට පස්සෙ තියෙන element එක එහෙම නැත්තම් කලින් .after() එකෙන් දාපු div එක තෝරගන්නවා.
  7. .prv() කියන එකෙන් uname එකට කලින් (previous) element එක තෝරනවා. .html('Please enter a user name') එකෙන් ඉස්සල්ල තොරගත්ත div එක ඇතුලට Please enter a user name කියන පණිවිඩය ඔබ්බවනවා. දැන් uname එක වටේ html එක මේ වගේ වෙනස් වෙන්න ඕනෙ.
    Name <input type="text" name="uname" id="uname"/>
     <div class="error_msg" style="color: #ff3333;">Please enter a user name</div>
    
  8. කොහොම හරි error message එකක් පෙන්නුවට පස්සෙ var error = false; කියලා කලින් හදලා තියෙන valiable එක error = true කියලා වෙනස් කරනවා.
  9. පස්සෙ එවටත් එකම ටික තමා කරලා තියෙන්නෙ. පොඩි පොඩි වෙනස්කම් තියනවා. radio button හෝ check box වල එකක්වත් select කරලා නැති වුනාම undefined කියලා තමා value එක එන්නෙ. ඒක select කරලා නැද්ද කියලා බලන්න තමා if(!sex) විදිහට බලන්නෙ. select එකේ මුකුත් select කරලා නැත්තම් ඉබේ select වෙලා තියන එකේ value එක null කියලා තමා තියෙන්නෙ. එකයි if(university == 'null') විදිහට බලන්නෙ. $('input[value=male]').before(message_div); කියන එකෙන් input කියලා තියෙන ඔක්කොම එවගෙන් value=male වන එක තෝරනවා. .before() කියන එකෙන් තොරපු element එකෙ පස්සෙ අපෙ div එක දාගන්නවා. .after() එක වගේමයි. .after() එකේ .prv() තිබ්බා වගේ .before() එකේ .next() කියන එක පාවිච්චි කරනවා. මේකෙ after, before, pre, next වෙනුවට පාවිච්චි කරන්න පුලුවන් ඒවා පහල තියෙනවා.

    • .hide()
    • .show()
    • .add()
    • .addClass()
    • .after()
    • .append()
    • .appendTo()

    • .attr()
    • .before()
    • .css()
    • .data()
    • .prepend()
    • .prependTo()
    • .wrap()

    • .wrapAll()
    • .remove()
    • .removeAttr()
    • .removeClass()
    • .removeData()
    • .replaceAll()
    • .replaceWith()
    මේවා ඔක්කොම වැඩ කරන්නෙ after එක වගෙ නෙමේ. ඒ වුනාට page එකේ වෙනසක් කරන්න පුලුවන් ඒවා මේකෙ තියනවා. වැඩි විස්තර JQuery API එකෙන් බලාගන්න. මීට වැඩිය විස්තර තියෙනවා. මම මේකෙ පාවිච්චි කරලා තියෙන්නෙ after එකයි before එකයි විතරයි.
  1. අන්තිමට if(error) return false; එකෙන් error එකක් තියෙනවනම් false කියන එක return කරනවා. එකෙන් form එක submit වෙන එක නතර වෙනවා. submit function එක ඇතුලෙ false කියලා return වෙනවනම් form එක submit වෙන්නෙ නෑ.

ඉස්සල්ලා කිව්ව $('.error_msg').remove(); එකෙන් කරන්නෙ form එක submit කරනකොට කලින් ආපු error_msg මකලා දානවා.

JQuery 2 - JQuery සරල code එකක තේරුම

කලින් පාඩම බලලා එනවනම් තමා හොද. මම උගන්වන්න ලේසි වෙන්න ඉස්සල්ල පිටුව මේ විදිහට වැඩි කරලා ලිව්වා. ඔයත් කරලා බලන්න. ලින්ක් එක click කරනකොට ඇලර්ට් එක එන්න ඕනෙ.
<html>                                                                
     <head>                                                                 
         <script type="text/javascript" src="jquery.js"></script>         
         <script type="text/javascript">                                        
           $(document).ready(function() {
                $("a").click(function () {
                    alert("Hello World");
                });
           });                              
         </script>                                                              
     </head>                                                                
     <body>                                                                 
          <a class="test link" id="link_1" href="">Test Link 1 </a><br/>
          <a class="test link" id="link_2" href="">Test Link 2 </a><br/><br/>
         
          Box<input class="test box" id="check_1" type ="checkbox"  />
     </body>                                                                
</html>
දැන් කියන්නම් මොකක්ද කලේ කියලා.

$("") කෑල්ලෙන් තමා අදාල element එක තෝර ගන්නෙ.
  • ඕක ඇතුලට a විතරක් දැම්මොත් html පිටුවෙ තියෙන සියලුම a tag වලට, ඊට පස්සෙ තියෙන event එකට අදාල function එක වැඩ කරනවා.
  • ඒක ඇතුලෙ .test (තිත ඉදිරියට) දැම්මොත් class එක test වන ඒ පිටුවෙ තියෙන හැම element එකක් ගැනම සදහන් වෙනවා. එතකොට checkbox එක click කරනකොටත් ඇලර්ට් එක වැඩ කරන්න ඕනෙ. ඒකෙ තියෙන්නෙත් ඒ class එකමනේ. තිතෙන් කියන්නෙ class එකක් කියලා. ඒකෙ .link කියලා දැම්මොත් link class එක තියෙන ඒවට වැඩ කරනවා. එතකොට ඇලරට් එක දෙන්නෙ ලින්ක් වලින් විතරයි. කියන්න අමතක වුනානෙ. මම හැදුව විදිහට හැම element එකේම class 2ක් තියෙනවා. උදා ලෙස checkbox එකේ test සහ box ලෙස දෙකක් අඩංගුයි.
  • අරක ඇතුලෙ #link_1 කියලා දැම්මොත් ඉතින් ඇලරට් දෙන්නෙ link_1 කියලා තියෙන ලින්ක් එකෙන් විතරමයි. (එකම පිටුවෙ එකම id එක දෙපාරක් යෙදෙන්න බෑ. හරියටම කිව්වොත් id එක uniqe. ඒ වගේම එක element එහෙකට තියෙන්න පුලුවන් එක් id එකක් විතරයි.)

මීට වඩා වැඩ පාරවල් දාලා හරියන element එක තෝරගන්න ක්‍රම තියෙනවා. ඒවා පස්සෙ පාඩමකින් කියලා දෙන්නම්. දැනට මේ හොදටම ඇති. (කවදා හරි ඒක ලියනකම් මේක බලන්න. http://api.jquery.com/category/selectors/ . මේකෙ තියෙනවා ඔක්කොම.)

ඊට ප්සසෙ click කියලා ලියලා තියෙන එක. ඒකට කියන්නෙ event එක කියලා. 

ඔය event ජාති ගනනාවක් තියෙනවා. (මෙතන තියෙනවා ඔක්කොම. http://api.jquery.com/category/events/ )

වැඩියෙන් පාවිච්චි කරන එවා පහලින් ලියන්නම්.
  • .change()
  • .click()
  • .dbclick()
  • .keydown()
  • .keypress()
  • .keyup()
  • .live()
  • .load()
  • .mousemove()
  • .mouseenter()
  • .mouseleave()
  • .mouseout()
  • .mouseover()
  • .mouseup()
  • .ready()
  • .resize()
  • .scroll()
  • .select()
  • .submit()
  • .toggel()
  • .trigger()
මේවා ඔක්කොම හැම element එකටම හරියන්නෙ නෑ. සමහර ඒවා මම පාවිච්චි කරලත් නෑ. එන එන විදිහට උළුඅස්ස ගහන්න තියෙන්නෙ.

ඉතින් ඔය event එක වෙන වෙලාවට මොනාද කරන්න ඕනෙ කියලා ඒකෙ function එක ඇතුලෙ ලියන්න ඕනෙ. ලියන්න පුලුවන් function පස්සෙ කියන්නම්කො.

JQuery 1 - JQuery වල අයන්න

මම ඉතින් දන්න දෙවල් වලින් පොඩිම එක තමා JQuery කියන්නෙ. මේක Java Script Librery එකක්. ලෝකයෙ වැඩියෙන්ම පාවිචිවෙන එක කිව්වොත් නිවැරදියි. මේක 76KB පොඩි ෆයිල් එකක්. පොඩි වුනාට මේක ලොකු ලොකු ඈයො පාවිච්චි කරන පට්ට වැඩ තොගයක් කරන්න පුලුවන් දෙයක්. කොටින්ම Google, Dell, Drupal, Wordpress, Mozilla වගෙ පට්ට වෙබ් සයිට් හදලා තියෙන්නෙ මේකත් පාවිච්චි කරලා. වෙබ් ඩිවොලොපින් කරනවා නම් ඉතින් අද කාලෙ මේක නැතුව බෑ. JQuery ඉගෙන ගන්න මේකම බලන්න ඕනෙ නෑ. Getting Started with jQuery පිටුවට ගියොත් ඉතින් කඩු වලින් ඉගෙන ගන්න පුලුවන්. සම්මුඛ පරීක්ෂණයකට යන්න කලින්, මෙලෝ දෙයක් දන්නෙ නැතුව රස්සාවට ගියාම පැයෙන් දෙකෙන් ගොඩ දා ගන්න තමා මේක ලියන්න හිතුවෙ. මුලදි පට්ට අමාරු වගේ හිතුවට මේක html වලට වඩා ලේසියි. හරි හරි වැඩි කතා නැතුව පටන් ගමුකො.

මෙන්න මෙතනින් JQuery බාගන්න පුලුවන්. ඕක බාගෙන jquery.js කියලා නම වෙනස් කරන්න.

ඔතනම html ලේඛණයක් හදලා (test.htm) පහත විදිහට jquery.js එක අඩංගු කර ගන්න. හරියට src කියන එකට jquery.js එකේ path එක දෙන්න අමතක කරන්න එපා.
<html>                                                                  
  <head>                                                                  
    <script type="text/javascript" src="jquery.js"></script>          
    <script type="text/javascript">                                         
       <!--මෙන්න මෙතන තමා ඊ ලගට ලියන java script ඒවා ලියන්නෙ. -->                                
    </script>                                                               
  </head>                                                                 
  <body>                                                                  
     <!-- මෙතන තමා html එවා ලියන්නෙ -->
  </body>                                                                 
</html>
හරි නම් මුලින්ම පල්ලෙහා එක උඩ java script කෑල්ලෙ ලියන්න.
$(document).ready(function() {
   // මේක ඇත්ලෙ තමා මෙතනින් එහාට jquery ඒවා ලියන්නෙ. 
});
පිටුව එන කොටම පුදනකොටම කාපි යකා කියලා jquery එකේ වැඩ කරන්නෙ $(document).ready එක තමා. ඕක නිකන් Java, C, C++ වල main method එක වගේනෙ.

jquery වැඩද කියලා බලන්න පුලවන් අරක ඇතුලෙ alert("Hello World"); කියලා ලියන්න. ලියලා ඉවර වෙලා refresh පාරක් දාලා බලන්න. හරියට ඇලරට් එක එනවනම් බඩු වැඩ.

හරියටම කියනවානම් දැන් පිටුව මේ වගේ තියෙන්න ඕනෙ.
<html>                                                                  
   <head>                                                                  
      <script type="text/javascript" src="jquery.js"></script>          
      <script type="text/javascript">                                         
         $(document).ready(function() {
            alert("Hello World");
         });                               
      </script>                                                               
   </head>                                                                 
   <body>                                                                  
     <!-- මෙතන තමා html එවා ලියන්නෙ -->
   </body>                                                                 
</html>
වැඩ නැත්නම් පහත ඒවා හරියට තියෙනවද බලන්න.
  • jquery.js එකේ path එකේ අවුලක්.
  • jquery ලිව්ව කෑල්ලෙ වැරැද්දක්. (වරහන්, ; , " හරියටම තියෙනවද බලන්න.)
කියන්න අමතක වුනානෙ. Firefox වල Firebug පාවිච්චි කරනවානම් මාර ලේසියි. ඒකෙ console එක දාලා refresh කලාම එන වැරැද්දෙන් මොනා හරි කර ගන්න පුලුවන් වේවි.

ඔක්කොම හරිනම් එතනින් එහාට යන්න තියෙන්නෙ. ඒකට පල්ලහා html කෑල්ල ලියා ගන්න. හරියට තැන බලලා body එක ඇතුලෙම ලියන්න.
<a href="">Test Link</a>     
Jquery කෑල්ලත් ලියා ගන්නකො.
$("a").click(function () {
   alert("Hello World");
});
දැන් පිටුව මේ විදිහට තියෙන්න ඕනෙ.
<html>                                                                  
   <head>                                                                  
      <script type="text/javascript" src="jquery.js"></script>          
      <script type="text/javascript">                                         
         $(document).ready(function() {
            $("a").click(function () {
               alert("Hello World");
            });
         });                               
      </script>                                                               
   </head>                                                                 
   <body>                                                                  
      <a href="">Test Link</a>      
   </body>                                                                 
</html>
දැන් ආයෙ පිටුව refresh කරලා ලින්ක් එකකට කොටලා බලන්න. ඇලරට් එක එනවානම් බඩු වැඩ.

මේකෙන් කියන්නෙ පිටුවෙ තියෙන හැම a element එකක්ම click කලාම function එක ඇතුලෙ තියෙන දේ වෙන්න කියලා. හරියටම වේන්නෙ මොකක්ද කියලා ඊලග පාඩමේදි කියලා දෙන්නම්.