0

まず第一に:
このページはオンライン薬局向けです。
小さなスクリプトを使用して保険会社からいくつかのデータを取得し、ユーザーが実際に保険に加入していることを確認しています。

私たちのページの1つには、2つのテキストフィールドと1つのボタンがあります。テキストフィールドは、.click()いくつかの情報を取得するためにボタンにを送信しますが、両方に適切なタイプのデータが入力されている場合に限ります。
これは動作します。

当サイトの使いやすさを向上させるために、さまざまなページからフローを作成しています。前述のページはその中にあります。必要な情報は常に2つのテキストフィールドにあると確信しているので、JavaScriptを使用.click()してボタンにを送信しています。しかし、どういうわけか$('ZK').click();機能しませんが、alert(); $('ZK').click();機能します。

最初の機能が機能せず、2番目の機能が機能しない理由を説明できる人はいますか?そして、おそらく私はこの小さな問題をどのように修正することができますか?

.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

<DIV id="RES">      
<INPUT TYPE="TEXT" ID="PNAAM" onkeypress="return noenter()"  NAME="PNAAM" VALUE="<%=PNAAM%>" class="text_inv" style="width:375px">
</div>
4

4 に答える 4

0

ほとんどの場合、他のエラーの中でも、セミコロンで終わっていない前のステートメントがあります。を削除して、テストするためalert()に残してみてください。;また、まだ行っていない場合は、少なくとも1つのエラーが表示されるはずなので、コンソールを確認してください。

于 2012-07-09T13:49:18.420 に答える
0

あなたの編集の後、私の最初の答えは意味をなさなくなりました。

編集 :

クリックハンドラーとajax呼び出しは、domreadyイベントハンドラー関数にラップされています。「呼び出しスクリプト」もdomreadyになっている必要があります。最新の編集によると、domreadyハンドラーはASPタグの直前で閉じられます<%

これはあなたが投稿したものです:

        }).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

});

ドキュメント構造がロードされるのを待つ必要があります。

ちなみに、質問でコードを移動するのをやめた場合は、現在使用しているものを投稿するだけで役立ちます。

于 2012-07-09T14:25:29.307 に答える
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代わりにmootools1.2.4+に使用してください

要約すると、合成を行うためにdomに行かないでください.click()-それは最も信頼できるものではなく、あなたはそうする必要はありません。

于 2012-07-09T15:44:20.730 に答える
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 %>
    });
于 2012-07-10T07:10:30.920 に答える