2012-07-09 30 views
0

首先:
本頁面爲在線藥房。
我們正在使用一個小腳本從保險公司檢索一些數據,以確保用戶實際上有保險。button.click只用前面的警報執行

在我們的其中一頁上,我們有2個文本字段和一個按鈕。文本字段發送一個.click()到按鈕來檢索一些信息,但前提是它們都填充了正確類型的數據。
This Works。

爲了提高我們網站的可用性,我們正在創建一個不同的頁面。前面描述的頁面就是其中之一。 我確定所需的信息總是在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> 

股利受阿賈克斯

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

@ raina77ow 這工作。文本字段包含完全相同的代碼和工作。 未動態加載,還有一些額外的代碼發佈在問題中。 – 2012-07-09 14:10:35

+0

好的......你可以用這些行替換這個'alert'調用:'var $ zk = $('ZK');的console.log($ ZK); $ zk.click();'? – raina77ow 2012-07-09 14:16:00

+0

@ raina77ow返回_Logboek:[object HTMLInputElement] _ – 2012-07-09 14:20:12

回答

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 %> 
    }); 
+0

'$$('#ZK,#BSN,#DOB')。addEvent('click',updateName);''和function updateName(event){event && event.stop && event.stop(); ...} - 爲他們找到模式和代碼。 – 2012-07-10 12:24:54

0

最有可能的,其他錯誤之中,你有沒有用分號結束了此前的說法。嘗試刪除alert()並離開;進行測試。另外,如果你還沒有,檢查你的控制檯,你應該看到至少 1錯誤。

+0

關於控制檯的好的提示,但不知何故,我懷疑ASI可能會被'$'符號弄糊塗。但是,再一次,真正的代碼顯然沒有給我們。 – raina77ow 2012-07-09 13:52:44

+0

只留下';'沒有做任何事情,控制檯對這部分非常感興趣。有一些CSS警告。 – 2012-07-09 14:08:01

0

編輯完成後,我的初始答案停止了。

編輯:

你的點擊處理和Ajax調用被包裹在一個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 

}); 

您需要等待文檔結構加載。

順便說一句,如果你停止在你的問題中移動代碼 - 只是發佈你正在使用的東西,這將有所幫助。

+0

已經發生。請仔細閱讀代碼的最後部分,但感謝您與我思考。 – 2012-07-09 14:49:07

+0

對,經過您的編輯,我的回答沒有太大意義。我會嘗試修改。 – jfrej 2012-07-09 14:50:02

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

相關問題