gpt4 book ai didi

php - 如何使用 livevalidation javascript 库 custom.validation 函数?

转载 作者:行者123 更新时间:2023-11-28 02:59:19 25 4
gpt4 key购买 nike

(注意:我原来的问题没有链接到我的 openid - 我在这里重新发布以便能够相应地编辑/更新/响应 - 如果任何有访问权限的人都可以删除原来的问题:/questions/1554916/how-to-使用-livevalidation-javascript-library-custom-validate-function 那会很棒!!)

大家好,

我对这一切都很陌生,所以请耐心等待!

我已经成功创建了一个表单,其中包含字段的实时验证检查,并且还使用 ajax/json 检查来查看用户名是否有效。我似乎对标准实时验证相处得很好。

这是我目前拥有的演示:link text

对 ajax 用户名检查做出响应的方法只需更改 a 中的消息以使其可见,因此我想使用实时验证检查来管理 ajax 响应 - 这样我可以将它们链接在一起(检查空白,然后使用,然后无效,然后作为正常传递)并让我的响应以相同的方式输出。

我目前有这个表单代码:

<?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' />

这是在后台运行的 json 部分:

<?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);
}
?>

因此查看 livevalidation 文档,您可以以这种方式使用自定义验证:

// 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} } );

我发现这非常神秘 - 我认为我应该能够指出“function(r)”,那里已经准备好了 - 但我怀疑我是否以正确的方式这样做,

任何人都可以阐明,我(希望!)理解它并找到解决方案!!

*更新*

我现在相信 validate.custom 部分的代码应该有效:

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'
});
";

但是,我似乎遇到了架构问题 - 实时验证需要即时答案,而 ajax 在后台进行。我收到了一项研究“观察者模式”的建议,这对我来说是一个全新的概念 - 我通常会研究 cms 的图形设计和结构方面!

任何进一步的帮助/澄清表示赞赏,因为我将不得不回到这个并让它工作!!

最佳答案

尝试以下链接中的代码示例。这对我有用。关键是在单独的 JavaScript 函数中编写逻辑并使用 Validate.Custom 函数调用它。

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

编辑:从链接添加代码:

//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;
}
}

关于php - 如何使用 livevalidation javascript 库 custom.validation 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1555149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com