2010-03-01 67 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等工具来完成此任务。