button.click仅在前面有警报的情况下执行

问题描述 投票:0回答:4

首先:此页面用于在线药房。我们正在使用一个小的脚本来从保险公司检索一些数据,以确保用户实际拥有保险。

在我们的一个页面上,我们有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>
javascript ajax mootools mootools-events
4个回答
0
投票

[除其他错误外,您很可能有一个前面的语句,该语句不以分号结尾。尝试卸下alert(),然后让;进行测试。另外,如果还没有,请检查控制台,因为您应该看到至少 1个错误。


0
投票

编辑后,我的最初答案就不再有意义。

编辑:

您的点击处理程序和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

});

您需要等待文档结构加载。

顺便说一句,如果您停止在问题中移动代码,这将有所帮助-只需发布您当前正在使用的内容。


0
投票

重用函数,选择器和变量...

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()-它不是最可靠的,您也不需要。


0
投票

我们的首席程序员(最初是在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 %>
    });
© www.soinside.com 2019 - 2024. All rights reserved.