2010-03-01 55 views
1

IM使用JavaScript中按鈕的的OnClientClick事件像問題的一個UpdatePanel

var TargetBaseControl = null; 
window.onload = function() 
{ 
    try 
    { 
     //get target base control. 
     TargetBaseControl = 
     document.getElementById('<%= this.GridView1.ClientID %>'); 
    } 
    catch(err) 
    { 
     TargetBaseControl = null; 
    } 
} 
function TestCheckBox() 
{    
    if(TargetBaseControl == null) return false; 

    //get target child control. 
    var TargetChildControl = "chkSelect"; 

    //get all the control of the type INPUT in the base control. 
    var Inputs = TargetBaseControl.getElementsByTagName("input"); 

    for(var n = 0; n < Inputs.length; ++n) 
     if(Inputs[n].type == 'checkbox' && 
     Inputs[n].id.indexOf(TargetChildControl,0) >= 0 && 
     Inputs[n].checked) 
     return true;   

    alert('Select at least one checkbox!'); 
    return false; 
} 

和更新面板,我有內部的代碼一樣

<asp:Button ID="ButtonSave" runat="server" OnClick="ButtonSave_Click"  
    OnClientClick="javascript:return TestCheckBox();" Text="Save" /> 

當我運行頁面,點擊該按鈕則沒有更進一步的處理只是按鈕已經點擊沒有happan ......

+0

您是否確定自己的點擊是否正確? – 2010-03-06 23:44:53

+0

我對上述代碼使用一個人爲的例子沒有任何問題。 我能看到的唯一潛在問題是,當'TargetBaseControl'未定義時,事件不會觸發。你確定你找到了正確的元素嗎? – codemonkeh 2010-03-15 02:33:45

回答

0

試試這個:

function TestCheckBox() 
{    
    var TargetBaseControl = null; 
    if(TargetBaseControl = document.getElementById('<%= this.GridView1.ClientID %>')){ 

    //get target child control. 
    var TargetChildControl = "chkSelect"; 

    //get all the control of the type INPUT in the base control. 
    var Inputs = TargetBaseControl.getElementsByTagName("input"); 

    for(var n = 0; n < Inputs.length; ++n) 
     if(Inputs[n].type == 'checkbox' && 
     Inputs[n].id.indexOf(TargetChildControl,0) >= 0 && 
     Inputs[n].checked) 
     return true;   
    } 
    alert('Select at least one checkbox!'); 
    return false; 
} 
0

查看頁面在瀏覽器中的來源。 看看OnClientClick分配會發生什麼。 它會被重寫/重新路由嗎?這一點應該很清楚。 你也可以使用firefox中的Firebug,IE8開發人員工具,Chrome開發人員工具或Visual Studio等工具來完成此任務。