2012-03-19 6 views
1

У меня возникли проблемы с получением javascript, зарегистрированным на странице, чтобы текстовое поле могло запустить его на onBlur. Я создал простую тестовую страницу, чтобы продемонстрировать свою проблему.ASP.NET Javascript текстовое поле onblur

Вот бэкенд VB.Net

Public Class Test 
Inherits System.Web.UI.Page 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim scriptText As String = "" 
    scriptText &= "<script language='javascript'>" 
    scriptText &= "function DisplayBlurMessage(){alert('you clicked outside the textbox');}" 
    scriptText &= "</script>" 

    ClientScript.RegisterClientScriptBlock(Me.GetType(), _ 
     "BlurScript", scriptText, False) 

End Sub 
End Class 

Вот это FrontEnd .aspx файл

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Test.aspx.vb" Inherits="WebApplication1.Test" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<title>Test Page</title> 

</head> 
<body> 
<h3>Test Page</h3> 
<form id="form1" runat="server"> 

<asp:TextBox id="TextBox1" columns="54" 
Text="Click here then outside" 
runat="server" onBlur="DisplayBlurMessage();"/> 

</form> 
</body> 
</html> 

Когда я просмотреть страницу, щелкнув из текстового поля, то Отладчик JavaScript дает мне потому что javascript не определен в источнике.

Я могу, однако, заставить его работать, поместив субстрат Page_Load в теги в aspx-файле, а затем напрямую получив доступ к атрибутам текстового поля. Но этого я не хочу.

В основном для моей последней страницы, я собираюсь выполнить итерацию по всем текстовым полям на странице, а затем дать им все методы onBlur и onFocus, которые используют их идентификаторы.

Возможно ли это? Я не вижу, где я ошибаюсь.

Пожалуйста, помогите :(

+0

У меня такое чувство, потому что его на самом деле не включили на страницу aspx, но это должно быть всегда? –

+0

Да, вам все равно нужно добавить Codebehind и Inherits в заголовке страницы (aspx). –

+0

Я знаю, что это звучит довольно просто, но если вы просматриваете источник, вы видите свой скрипт в коде? – Tim

ответ

2

Вы, вероятно, яваскрипт сорсинг ошибки из строки:

ClientScript.RegisterClientScriptBlock(Me.GetType(), _ 
     "BlurScript", scriptText, True) 

True означает, что scriptText должны быть обернуты с тегами сценария, но вы уже включили тег сценария . либо изменить это логическое значение Ложь или удалить теги сценария (see doc):

вариант А:

Dim scriptText As String = "" 
scriptText &= "function DisplayBlurMessage(){alert('you clicked outside the textbox');}" 

ClientScript.RegisterClientScriptBlock(Me.GetType(), _ 
    "BlurScript", scriptText, True) 

Вариант б:

Dim scriptText As String = "" 
scriptText &= "<script language='javascript'>" 
scriptText &= "function DisplayBlurMessage(){alert('you clicked outside the textbox');}" 
scriptText &= "</script>" 

ClientScript.RegisterClientScriptBlock(Me.GetType(), _ 
    "BlurScript", scriptText, False) 

Edit:

Для того, чтобы зарегистрировать скрипт, который вы должны иметь ScriptManager на страницу. Добавьте следующее в форму:

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
+0

Я уже пробовал, что с тегами скрипта или нет, он все еще не работает. –

+0

Вы не забыли добавить менеджера скриптов на свою страницу? – Candide

+0

thankyou :) это работает! –

1

Попробуйте:

Последний параметр RegisterClientScriptBlock должен быть ложным.

ClientScript.RegisterClientScriptBlock(Me.GetType(), _ 
     "BlurScript", scriptText, False) 

http://msdn.microsoft.com/en-us/library/bahh2fef.aspx

EDIT: В заголовке страницы, необходимо также поставить CodeBehind="Test.aspx.vb" и Inherits="yourproject.Test".

<%@ Page Language="VB" AutoEventWireup="True" CodeBehind="Test.aspx.vb" Inherits="yourproject.Test" %> 
+0

все еще не работает, я пробовал с и без сценариев. –

+0

thankyou :) он работает! –

Смежные вопросы