我的表单上有5个文本框(cfinput
)来输入组织代码。我想要做的是,当用户键入组织代码时,应该有一个onkeyup
函数,它将使用数据库中的所有值验证该值,如果它无效,它应该显示"无效代码。 "
我在一个名为OrgIndexArray
的数组中得到了所有组织代码。我没有得到,我将如何为所有5个文本框(某种cfloop
执行此操作?)
<cfquery name="getOrgCodes" datasource="#sqlDS#">
select distinct OrgCode From #SAUserIndex#
</cfquery>
<cfset IndexCodesList = ValueList(getOrgCodes.OrgCode)>
<cfset IndexCodesArray = #ListToArray(IndexCodesList)#>
<script>
var IndexArray=<cfoutput>#SerializeJSON(getOrgCodes,true)# </cfoutput>
$(document).ready(fucntion() {
$('.IndexCodes').on('keyup',function(){
if(!!~jQuery.inArray($this.val(),IndexArray)) {
document.getElementById("message").innerHTML="Invalid Index";
}
});
});
</script>
答案 0 :(得分:1)
目前的问题是你的所有&#34;验证&#34;数据仅在服务器端可用。理想情况下,您希望在表单字段上使用javascript作为用户类型进行验证。通过这种方式,您可以执行验证客户端,而无需对服务器进行其他调用。
实现目标的方法很少:
一种(可能有点hacky)方法是使用Coldfusion填充页面中的javascript数组:
// add class="catbutton" to buttons; you can rename the class
$(".catbutton").click(function(e){
e.preventDefault();
$("body").toggleClass("noscroll");
var name = $(this).attr("id");
$.ajax({
context: $('#lightbox-holder'),
type: 'POST',
dataType : "html",
url : "/template/"+name+"-lightbox.html",
success : function(results) {
setTimeout(function() {
$('#lightbox-holder').html(results);
$('section#lightbox').addClass("open");
},100);
setTimeout(function() {
$('a.xbutton').addClass("open");
},300);
}
});
});
或者你可以创建一个类别的API,这样你就可以对coldfusion <script>
var myArray = <cfoutput>#serializeJson(OrgIndexArray)#</cfoutput>;
//use javascript to validate the input by checking the cfinput value with the array.
//assuming you have jquery:
$(document).ready(function(){
$('.classOfYourInputHere').on('keyup',function(){
if ($.inArray( $this.val(), arr ))
{
//do something
}
});
});
</script>
做一个ajax请求,以便在javascript中检索数组数据,然后你会继续上面的步骤。
请注意,无论如何这都是未经过测试,但希望能帮助您朝着正确的方向前进。