Nasıl livevalidation javascript kütüphanesi custom.validation fonksiyon kullanabilirim?

2 Cevap php

(Not: benim asıl soru benim OpenID ile bağlantılı değildi - erişimi olan herkes özgün soru kaldırmak olabilir - eğer ben buna göre yanıt / / güncelleme düzenlemek edebilmek için burada yineden ediyorum: / questions/1554916/how-to-use-the -livevalidation-javascript-kütüphane-özel-doğrulamak-fonksiyonu bu harika woudl!)

Heya Dostlarım,

Ben bu yüzden lütfen bana ayı tüm bu için çok yeni!

Ben alanların livevalidation denetimi ile bir form oluşturmak için mangaged, ve aynı zamanda bir Usename geçerli olup olmadığını görmek için bir ajax / json çek ile var. Ben standart canlı doğrulama ile birlikte ince almak gibi.

İşte şu anda ben ne bir demo: link text

Ajax adı check yanıtın vermek için yöntem, basit bir vize yapmak için bir mesaj ile bir değişir, bu yüzden ajax yanıtının yönetmek için bir livevalidation çek kullanmak istiyorum - ben sonra, boş kontrol (bunları birlikte bağlayabilirsiniz sonra geçersiz, sonra da ok pass) ve benim yanıtları çıkış aynı yol var, kullanın.

Şu anda bu formu kodu vardır:

<?php

$script = "
$('uname').addEvent('blur', function(e) {
   e = new Event(e).stop();
   // Show the spinning indicator when pressing the submit button...
   $('indicator1').setStyle('display', 'block');

   var username = $('uname').value;
   if ( username != '' ) {
        var url = 'index.php?option=com_chronocontact&chronoformname=custom_livevalidation_test&task=extra&format=raw';
        var jSonRequest = new Json.Remote(url, {
           onComplete: function(r) {
              $('indicator1').setStyle('display','none');
               if ( r.username_ok ) {
                 $('username_msg').setHTML(\"<span style='color:green;'>Username '\"+username+\"' is OK</span>\");
              } else {
                 $('username_msg').setHTML(\"<span style='color:red;'>Sorry, username '\"+username+\"' is already taken</span>\");
              }
         }
      }).send({'username': username});
   }
});
";

global $mainframe;
if ($mainframe->isSite())
{

$doc =& JFactory::getDocument();
$script = "
window.addEvent('domready', function() {
$script
});
";
$doc->addScriptDeclaration($script);
};


$script = "
var uname = new LiveValidation('uname', { 
  validMessage: 'This is a valid username', 
  wait: 500
});
uname.add(Validate.Presence, {
  failureMessage: 'Username must not be blank!'
});
uname.add(Validate.Format, {
  pattern: /^[a-zA-Z\-_]{4,16}$/, 
  failureMessage: 'Username must be between 4 and 16 characters' 
});
";

global $mainframe;
if ($mainframe->isSite())
{

$doc =& JFactory::getDocument();
$script = "
window.addEvent('domready', function() {
$script
});
";
$doc->addScriptDeclaration($script);
};
?>


<div>
<span class="cf_label">Username: </span>
<input style="" id="uname" name="uname" class="" title="" value="" type="text">
<span id="indicator1" style="display: none"><img src="/images/hourglass.gif" alt="checking..." /></span>
<div id='username_msg'></div>
</div>
<br />
<input type='submit' name='submit' value='submit' />

Bu arka planda çalışır json parçası olmak:

<?php
$json = stripslashes($_POST['json']);
$json = json_decode($json);

if ( $json->username ){
    $db =& JFactory::getDBO();
    $query = "
        SELECT COUNT(*)
           FROM `jos_users`
           WHERE `username` = ".$db->quote($json->username).";";
    $db->setQuery($query);
    $response = (bool) !$database->loadResult();
    $response = array('username_ok' => $response );
    echo json_encode($response);
}
?>

Yani livevalidation belgelerine bakarak, bu moda özel bir doğrulama kullanabilirsiniz:

// Pass a function that checks if a number is divisible by one that you pass it in args object
// In this case, 5 is passed, so should return true and validation will pass
Validate.Custom( 55, { against: function(value,args){ return !(value % args.divisibleBy) }, args: {divisibleBy: 5} } );

Ama ben bunu doğru şekilde yapıyorum şüphe - Ben bu çok şifreli bulma am - Ben 'fonksiyonu (r)' Ben işaret etmek gerekir düşünürdüm orada tüm hazır şu

Herkes herhangi bir ışık tutabilecek, ben bir çözüm ortaya çıkarmak hem de onu anlamak için (hoping!) duyuyorum!

* Updates *

Ben şimdi validate.custom kısmı için bu kod çalışması gerektiğine inanıyoruz yol:

var uname = new LiveValidation('uname', { 
  validMessage: 'This is a valid username', 
  wait: 500
});
uname.add(Validate.Presence, {
  failureMessage: 'Username must not be blank!'
});
uname.add(Validate.Custom('uname', { against: function(r){
return !(r.username_ok) }, args: {} } ),
failureMessage: 'This username is already taken' 
});
uname.add(Validate.Format, {
  pattern: /^[a-zA-Z\-_]{4,16}$/, 
  failureMessage: 'Username must be between 4 and 16 characters' 
});
";

Ancak ben bir mimari sorunu var gibi görünüyor - canlı doğrulama anında cevap istiyor, ve ajax arka planda yer alır. Ben 'gözlemci desen' araştırmak için bir öneri benim için tamamen yeni bir konsept şu oldu - Ben genellikle grafik tasarım ve bir cms yapısı tarafı ile oynuyorum!

Ben geri gelmek ve bu çalışma almak zorunda olacak gibi başka bir yardım / açıklama takdir!

2 Cevap

Aşağıdaki bağlantıyı kod örneği deneyin. Bu benim için çalıştı. Anahtarı ayrı bir JavaScript işlevi mantığı yazmak ve Validate.Custom fonksiyonu ile çağırmaktır.

http://www.experts-exchange.com/codeSnippetPopup.jsp?csid=259114

Edit: Added code from the link:

//input Form
<form  action="#" method="post">
    <label for="ip">IP:</label>
    <input type="text" name="ip" id="ip"/>
    <br/>
    <label for="ip">Case:</label>
    <input type="text" name="ticket" id="ticket"/> 
    <br/>
    <input type="submit" value="Submit" name="submit" onclick="checkInput()"/>                          
</form>

/// JS function
function checkInput() {
    var ip = new LiveValidation('ip', {onlyOnSubmit: true } );
    ip.add( Validate.Presence );
    ip.add( Validate.Custom, { against: function(value){ return isValidIPAddress(value) }, failureMessage: "IP is not valid" } ); 
    var ticket = new LiveValidation('ticket', {onlyOnSubmit: true } );
    ticket.add( Validate.Presence );
    ticket.add( Validate.Custom, { against: function(value){ return Case(value) }, failureMessage: "Case is not valid" } ); 

    var ipSubmit = ip.form.onsubmit;
    var ticketSubmit = ticket.form.onsubmit;
    ip.form.onsubmit = function(){
    var validIP = ipSubmit();
    var validCase = ticketSubmit();
    if((validIP)& (validCase))
       getActionBack('0');
       return false;
    }
}

Burada çalışan başka bir örnek.

f1.add(
   Validate.Custom, 
   { 
      against: function (value, args) { return isValidCreditCard(value, args.cardType) }, 
      args: { cardType: "Visa" }, 
      failureMessage: "Credit Card number is not valid" 
   }
);

Garip bir parçasıdır ...

against: function (value, args) { return isValidCreditCard(value, args.cardType) }

... Hangi benim isValidCreditCard işlevi 'karşı' fonksiyonu içinde yuvalanmış. Karşı fonksiyonu sadece benim isValidCreditCard işlevi döndürdü ne döndürür.

Sadece şifreli örnekte olduğu gibi orada yerine gerçek fonksiyonunu koyabilirsiniz, ama bir çizgiden daha fazla şey muhtemelen oldukça kafa karıştırıcı olacaktır. (Neden örnekte kullanımı% [modülü]? Kimse bu operatörün bilir!)