2012-06-27 133 views
0

所以我有一个文本框,我添加了markAsException的onchange事件。Textbox onchange事件

我的JavaScript -

function markAsException(recordID) { 
    //alert("Exception"); 

    //mark exception column 
    document.getElementById("ctl00_cpMain_lblScrollException_" + recordID).innerText = "Exception"; 
    document.getElementById("ctl00_cpMain_lblScrollException_" + recordID).style.color = "#FF0000"; 
    document.getElementById("ctl00_cpMain_tdScrollException_" + recordID).style.backgroundColor = "#99CCFF"; 

    //enable comments ddl and remove blank (first item) 
    document.getElementById("ctl00_cpMain_ddlCommentId_" + recordID).disabled = false; 
    document.getElementById("ctl00_cpMain_ddlCommentId_" + recordID).focus(); 
    document.getElementById("ctl00_cpMain_ddlCommentId_" + recordID).options[0] = null; 
} 

我想要做的是,当用户在文本框更改值,以纪念一列作为“例外”,然后集中一个下拉列表,他们必须选择例外的原因。

这就是发生了什么..如果我在该文本框中并更改它,然后选项卡,它将选项卡下拉列表。

但是,如果我更改了值,然后只需单击窗体上的另一个文本框,我就不会关注下拉列表。

我该如何做到这一点?

+1

不是一个答案,因为这是题外话,但我不相信功能你可以假设.NET控件每次都会以相同的ClientID生成。本文可能有所帮助:http://encosia.com/robust-aspnet-control-referencing-in-javascript – Liath

回答

0

我会建议使用JQuery的change()函数。

其优点是它将在不同的浏览器中更稳定。

喜欢的东西:

$('#<%= TextBox1.ClientID %>').change(function(){ 
     // extract the recordID from the textbox - perhaps with an attribute? 
     markAsException(recordID); 
    }); 

我的意见是越来越长,所以我扩大:

在JQuery的documentation看看对于其设置为页面加载完成。如果TB是你的文本框的ID你的选择会是

$('#<%= tb.ClientID %>') 

我会建议你更换你的代码,并使用

tb.Attributes.Add("recordID", recordId.ToString()); 

这将增加你需要到文本标签的ID。一旦你在我上面列出你可以使用以下的选择,以获得的recordId在javascript

var recordID = $('#<%= TextBox1.ClientID %>').attr('recordID'); 

总之

$(document.ready(function(){ 
    $('#<%= tb.ClientID %>').change(function(){ 
     var recordID = $('#<%= tb.ClientID %>').attr('recordID'); 
     if(recordID){ 
     markAsException(recordID); 
     } 
    }); 
    }); 
+0

我的c#代码是 - tb.Attributes.Add(“onchange”,“markAsException('”+ recordId +“' )“); ..我将如何改变? (其中tb是TextBox控件) – duckmike

+0

@duckmike查看我的更新 – Liath