2014-06-30 2 views
-1

Я делаю проверку в asp.net через внешний файл javascript. Как передать значение функции, находящейся во внешнем файле javascript?Как передать значение внешнему файлу javascript с помощью asp.net

мой жерех код:

<asp:TextBox runat="server" ID="txtInput"></asp:TextBox> 
<asp:Button runat="server" 
    OnClientClick="javascript:phonenumber(document.getElementByID('<%txtInput.text %>'))" 
    Text="Click"/>   

При нажатии на эту кнопку, как это должно показать предупреждающее сообщение, но это не так. Пожалуйста, скажи мне, что я делаю неправильно.

код My Javascript является:

function phonenumber(inputtxt) 
{ 
    var phoneno = /^\d{10}$/; 
    if(inputtxt.value.match(phoneno)) 
    { 
     return true; 
    } 
    else 
    { 
     alert("Not a valid Phone Number"); 
     return false; 
    } 
} 
+0

Посмотрите на консоли JavaScript. Какие ошибки вы получаете? (У вас есть очевидная опечатка, о которой вам следует предупредить) – Quentin

+0

Кроме того, поскольку вы используете asp.net, почему не используете валидатор регулярных выражений? все asp-проверки обрабатываются по умолчанию по умолчанию ('EnableClientScript =" True "'). – fnostro

ответ

0

Есть несколько проблем здесь. Прежде всего помните, что <%= txtInput.text %> собирается создать вывод, который выглядит как javascript:phonenumber(), потому что текстовое поле, по-видимому, не имеет значения при визуализации страницы. Даже если пользователь меняет текстовое поле, он не будет отражен в этом вызове функции.

Во-вторых, вам не нужна часть javascript:. И, как упоминалось ранее, это чувствительный к регистру. В-третьих, код JavaScript для вашего регулярного выражения отсутствует в скобках.

Попробуйте что-то вроде этого:

функция ValidatePhone (элемент) { вар эш = document.getElementById (элемент);

 var phoneno = "/^\d{10}$/"; 
     if (el.value.match(phoneno)) { 
      alert("Valid"); 
      return true; 
     } else { 
      alert("Not a valid Phone Number"); 
      return false; 
     } 
    } 

 <asp:TextBox runat="server" ID="txtInput" ClientIDMode="Static" /> 
     <asp:Button runat="server" OnClientClick="ValidatePhone('txtInput');" Text="Test" /> 
    </div> 
</form> 

Примечание: Я не протестировать функцию регулярных выражений.

+0

Да Это сработало .... – AbhayBohra

+0

, но какое использование свойства ClientIDMode здесь .... – AbhayBohra

+0

Это позволяет вам контролировать, присваивает ли компилятор ASP.NET имя или если вы это делаете. Это полезно в таких ситуациях, но я стараюсь не использовать его слишком часто, потому что, если вы переименовываете элементы, вы должны помнить о том, чтобы обновлять их в нескольких местах в коде.http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode(v=vs.110).aspx –

1

другой вариант: установить текстовое поле ClientIDMode в Static и просто ссылаться на поле ввода по идентификатору, как txtInput, таким образом, вы можете избежать имя коверкая и сделать ваши поля ввода более JS дружественным таким образом, что это:

<asp:TextBox runat="server" ID="txtInput" ClientIDMode="Static"></asp:TextBox> 
<asp:Button runat="server" OnClientClick="phonenumber()" Text="Click"/> 

визуализируется как: (обратите внимание на идентификатор на ввод текста)

<input name="ctl00$ctl00$MainContent$txtInput" type="text" id="txtInput"> 
<input type="submit" name="ctl00$ctl00$MainContent$Button1" value="Click" onclick="phonenumber();" id="MainContent_Button1"> 

отметить также, что кнопка отображается как тип отправленное, который заставит постбэк в любом случае. yiou может просто хотеть использовать простой текстовый тег html с равным onclick='phonenumber()', чтобы избежать обратной передачи, потому что даже если вы выберете рендеринг с атрибутом UseSubmitBehavior="False", он все равно будет вводить обратную передачу после вашего кода OnClientClick.

JS:

function phonenumber() 
{ 
    var phoneNumText = document.getElementById('txtInput'); 
    var phoneno = /^\d{10}$/; 
    if(phoneNumText.value.match(phoneno)) 
     return true; 
    else 
    { 
     alert("Not a valid Phone Number"); 
     return false; 
    } 
} 
+0

Да, когда im использует обычную кнопку и текстовое поле, оно работает даже при передаче аргумент .... но когда дело доходит до asp control .. ничего не происходит – AbhayBohra

+0

Вы можете остановить обратную передачу, добавив 'CausesValidation = False' в дополнение к' UseSubmitBehavior' –

+0

@Abhay: это связано с отображением 'asp: Button' как тип отправки, обратная передача топает вызов JS. Вам нужно использовать тип кнопки asp, который не отображается на кнопку типа отправки. Элементы кнопки asp button тесно привязаны к элементам проверки проверки asp.net, и они отображают много своего javascript. Он очень быстро усложняется, когда вы пытаетесь сплести свою собственную проверку в миксе, я нашел, что лучше всего использовать встроенную проверку ASP или использовать базовый HTML и полностью исключить проверку ASP.NET. Вы все еще можете запускать обратные передачи из JS через '__doPostBack();' – fnostro

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