首先:此页面用于在线药房。我们正在使用一个小的脚本来从保险公司检索一些数据,以确保用户实际拥有保险。
在我们的一个页面上,我们有2个文本字段和一个按钮。文本字段将.click()
发送到按钮以检索某些信息,但前提是它们都填充有正确的数据类型。这有效。
为了增强网站的可用性,我们正在通过不同的页面创建流程。前面介绍的页面就是其中之一。我确定所需的信息始终在2个文本字段中,因此我正在使用JavaScript将.click()
发送到按钮。但是以某种方式$('ZK').click();
不起作用,但是alert(); $('ZK').click();
起作用。
有没有人能够向我解释为什么第一个不起作用而第二个不起作用?也许还有我该如何解决这个小问题?
.click()
是否有没有事件或事件?
此页中的代码:(未间接加载)
文本字段和按钮:
<INPUT onkeypress="return noenter()"
onkeydown="return isNumericKey(event)"
TYPE="TEXT"
class="ajaxsearch"
name="DOB" id="DOB"
value="<%=DOB%>"
MAXLENGTH="8"
style="width:60px;height:18px"
onkeyup="javascript:if ($(DOB).get('value').length==8 &&
$(DOB).get('value')!='ddmmjjjj')
{
var myFx=new Fx.Tween($(DOB));
myFx.set('color','#000066');
$('ZK').click();
} else {
var myFx=new Fx.Tween($(DOB));
myFx.set('color', '#cc0000');
};"> `
<INPUT url="?NC=<%=Rnd(Now)%>"
TYPE="BUTTON"
NAME="ZK" ID="ZK"
VALUE="Zoek mij"
class="button"
style="width:70px;height:22px">
通话脚本:
if ($('DOB').get('value').length==8
&& $('DOB').get('value')!='ddmmjjjj')
{
var myFx=new Fx.Tween($('DOB'));
myFx.set('color', '#000066');
//alert();
$('ZK').click();
} else {
var myFx=new Fx.Tween($('DOB'));
myFx.set('color', '#cc0000');
}
Ajax脚本和调用:
<script language="javascript">
window.addEvent('domready', function() {
$('ZK').addEvent('click', function(event) {
event.stop();
var req = new Request.HTML({
method: 'post',
url: '../ajax/a_bsn.asp',
data: {
'BSN':$('BSN').get('value'),
'DOB':$('DOB').get('value'),
'RequestType':'WWW',
'RXID':'<%=GUID%>'
},
update: $('RES'),
onRequest: function() {
$('RES').innerHTML = '<img width="16px" height="16px" src="../images/spinner.gif"/>';
}}).send();
});
////////
<% If (Len(BSN)=8 or Len(BSN)=9) and IsNumeric(BSN) and Len(DOB)=8 and IsNumeric(DOB) Then %>
if ($('BSN').get('value').length>7){
var myFx=new Fx.Tween($('BSN'));
myFx.set('color', '#000066');
} else {
var myFx=new Fx.Tween($('BSN'));
myFx.set('color', '#cc0000');
}
if ($('DOB').get('value').length==8 && $('DOB').get('value')!='ddmmjjjj'){
var myFx=new Fx.Tween($('DOB'));
myFx.set('color', '#000066');
// var $zk = $('ZK'); console.log($zk); $zk.click();
// alert('Uw gegevens worden ingevuld.');
setTimeout("$('ZK').click();",1);
//$('ZK').click();
} else {
var myFx=new Fx.Tween($('DOB'));
myFx.set('color', '#cc0000');
}
<% End If %>
////////
});
</script>
受Ajax影响的分区
<DIV id="RES">
<INPUT TYPE="TEXT" ID="PNAAM" onkeypress="return noenter()" NAME="PNAAM" VALUE="<%=PNAAM%>" class="text_inv" style="width:375px">
</div>
[除其他错误外,您很可能有一个前面的语句,该语句不以分号结尾。尝试卸下alert()
,然后让;
进行测试。另外,如果还没有,请检查控制台,因为您应该看到至少 1个错误。
编辑后,我的最初答案就不再有意义。
编辑:
您的点击处理程序和ajax调用包装在domready
事件处理程序函数中。您的“通话脚本”也应该准备就绪。根据您的最新编辑,在ASP标记domready
<%
处理程序这是您发布的内容:
}).send(); // --this is the end of ajax
}); // -- this is the end of the click handler
}); // -- this is the end of domready
<% If (Len(BSN)=8
所以您的通话脚本:
if ($('DOB').get('value').length==8 && $('DOB').get('value')!='ddmmjjjj') {
var myFx=new Fx.Tween($('DOB')); myFx.set('color', '#000066');
//alert();
$('ZK').click();
} else { var myFx=new Fx.Tween($('DOB')); myFx.set('color', '#cc0000'); }
需要进入domready
内部附上点击处理程序后:
window.addEvent("domready", function(){
// Let's attach the click handler:
$('ZK').addEvent('click', function(event) {...do the ajax here etc...});
// the "call script" needs to be here
});
您需要等待文档结构加载。
顺便说一句,如果您停止在问题中移动代码,这将有所帮助-只需发布您当前正在使用的内容。
重用函数,选择器和变量...
window.addEvent('domready', function() {
var ZK = $('ZK');
ZK.addEvent('click', function(event) {
// make event safe and reusable via software call
event.stop && event.stop(); // don't call stop if not a real event.
// logic here
});
$('DOB').addEvent('keyup', function() {
// this == DOB
var value = this.get('value'); // get it once.
if (value.length && value.length === 8 && value !== 'ddmmjjjj') {
// do not call click! we can now fireEvent
ZK.fireEvent('click');
}
});
});
不要使用内联js。不要依赖$,请使用document.id
代替mootools 1.2.4 +
回顾一下,不要去dom进行合成的.click()
-它不是最可靠的,您也不需要。
我们的首席程序员(最初是在8年前在某个地方创建该页面的,他认为将所有逻辑都转换为函数可能更好。这样,如果需要,可以在代码的其他部分中更轻松地触发它们。我们还删除了所有(旧)内联脚本。
在此解决方案中,使用了其他答案的某些部分。我还要感谢其他答复者和评论者的帮助。
代码的顶部现在看起来像这样(经过测试并在浏览器中稳定运行):
function updateName(){
if (document.id('BSN').get('value').length>7 && document.id('DOB').get('value').length==8 && document.id('DOB').get('value')!='ddmmjjjj'){
var req = new Request.HTML({
method: 'post',
url: '../ajax/a_bsn.asp',
data:{'BSN':document.id('BSN').get('value'),'DOB':document.id('DOB').get('value'),'RequestType':'WWW','RXID':'<%=GUID%>'},
update: document.id('RES'),
onRequest: function() {
document.id('RES').innerHTML = '<img width="16px" height="16px" src="../images/spinner.gif"/>';
}
}).send();
}
}
function checkBSN(){
if (document.id('BSN').get('value').length>7){
var myFx=new Fx.Tween(document.id('BSN'));
myFx.set('color', '#000066');
updateName();
} else {
var myFx=new Fx.Tween(document.id('BSN'));
myFx.set('color', '#cc0000');
}
}
function checkDOB(){
if (document.id('DOB').get('value').length==8 && document.id('DOB').get('value')!='ddmmjjjj'){
var myFx=new Fx.Tween(document.id('DOB'));
myFx.set('color', '#000066');
updateName();
} else {
var myFx=new Fx.Tween(document.id('DOB'));
myFx.set('color', '#cc0000');
}
}
window.addEvent('domready', function() {
document.id('ZK').addEvent('click', function(event) {
event.stop && event.stop();
updateName();
});
document.id('BSN').addEvent('keyup', function(event) {
event.stop && event.stop();
updateName();
});
document.id('DOB').addEvent('keyup', function(event) {
event.stop && event.stop();
updateName();
});
<% If (Len(BSN)=8 or Len(BSN)=9) and IsNumeric(BSN) and Len(DOB)=8 and IsNumeric(DOB) Then %>
updateName();
<% End If %>
});