2013-08-07 28 views
1

我知道,我知道,「不要使用AjaxToolKit」...但假設我堅持它。使用jQuery val和AjaxToolKit的TextBoxWatermarkExtender與IE

如果我有以下幾點:

<asp:TextBox runat="server" ID="textBox" /> 
<asp:TextBoxWatermarkExtender runat="server 
    TargetControlID="textBox" 
    WatermarkText="Text" /> 

而且

var textBoxSelector = $(#'<%= textBox.ClientID %>'); 

那麼這不起作用(即,它改變的水印文字,但沒有所需的文本)

textBoxSelector.val('example text'); 

但是我發現這在Chrome中確實有效:

textBoxSelector.focus(); 
textBoxSelector.val('example text'); 

但不是在Internet Explorer中。

任何想法如何實現?

+1

$('<%= textBox.ClientID%>');需要$('#<%= textBox.ClientID%>'); – Pete

+0

只是一個錯字。更新。 –

回答

2

您需要設置和使用水印擴展器本身的行爲。

<asp:TextBox runat="server" ID="textBox" /> 
<asp:TextBoxWatermarkExtender runat="server 
    TargetControlID="textBox" BehaviorID="textboxWaterMark" 
    WatermarkText="Text" /> 

然後使用$find()訪問對象和set_Text()

var textboxWaterMark = $find("textboxWaterMark"); 
textboxWaterMark.set_Text('example text'); 

如果$find()被返回null,則可能要等到頁面加載。不使用jQuery,但使用工具包

Sys.Application.add_load(MyFunction); 
function MyFunction() { 
    var textboxWaterMark = $find("textboxWaterMark"); 
    textboxWaterMark.set_Text('example text'); 
} 
+0

這是完美的 - 我唯一的修正是給TextBoxWatermarkExtender一個ID然後做var textboxWaterMark = $ find(「<%= watermarkExtender.BehaviorID%>」);' –

+0

這太奇怪了,你有要做到這一點。行爲ID的目的是讓您不必使用服務器標籤通過javascript訪問它。但是,我並不感到驚訝。該工具包一直有點不可靠。無論哪種方式,很高興它爲你工作。 – Smeegs

+0

你不這樣做,但它只是意味着如果你由於某種原因改變了行爲ID(或者你刪除了控件),那麼ID將被更新或者相應地拋出一個錯誤。 –