2015-09-10 3 views
0

У меня есть страница регистрации ASP.NET, созданная в пользовательском элементе управления с физическим адресом и почтовым адресом, есть также флажок, если они одинаковы. Этот флажок вызывает функцию JavaScript, которая скрывает ненужные поля и останавливает их проверку. Это работало в тестировании.Javascript не найден в пользовательском контроле

Этот элемент управления был помещен на веб-сайт, а когда он запущен и щелчок отмечен, а исключение выбрано «Ошибка выполнения JavaScript:« updateValidator »не определено». Javascript на той же странице. Это происходит через разные пользовательские элементы управления с различным javascript.

веб-страницы ASP.NET

<asp:CheckBox ID="checkboxPostalPhysicalSame" TextAlign="Left" runat="server" Text="Postal same as physical address?" OnClick="updateValidator();"/> 

<span id="spanPostalAddress"> 
<br /> 
<asp:Label ID="lblPostalAddress" runat="server" Text="Postal Address: " AssociatedControlID="txtPostalAddress"/> 
<asp:TextBox ID="txtPostalAddress" runat="server" Wrap="true" /> 
<asp:RequiredFieldValidator ID="rfvPostalAddress" runat="server" ControlToValidate="txtPostalAddress" ErrorMessage="Address is required." 
    ToolTip="Address is required." ValidationGroup="vgRegistration" >* Required</asp:RequiredFieldValidator> 


<br /> 
<asp:Label ID="lblPostalSuburb" runat="server" Text="Suburb: " AssociatedControlID="txtPostalSuburb"/> 
<asp:TextBox ID="txtPostalSuburb" runat="server" Wrap="true" /> 
<asp:RequiredFieldValidator ID="rfvPostalSuburb" runat="server" ControlToValidate="txtPostalSuburb" ErrorMessage="Suburb is Required." 
    ToolTip="Suburb is required." ValidationGroup="vgRegistration" >* Required</asp:RequiredFieldValidator> 

<br /> 
<asp:Label ID="lblPostalCity" runat="server" Text="City: " AssociatedControlID="txtPostalCity"/> 
<asp:TextBox ID="txtPostalCity" runat="server" Wrap="true" /> 
<asp:RequiredFieldValidator ID="rfvPostalCity" runat="server" ControlToValidate="txtPostalCity" ErrorMessage="City is Required." 
    ToolTip="City is required." ValidationGroup="vgRegistration" >* Required</asp:RequiredFieldValidator> 

<br /> 
<asp:Label ID="lblPostalPostCode" runat="server" Text="Postcode: " AssociatedControlID="txtPostalPostCode"/> 
<asp:TextBox ID="txtPostalPostCode" runat="server" Wrap="true" TextMode="Number" /> 
<asp:RequiredFieldValidator ID="rfvPostalPostcode" runat="server" ControlToValidate="txtPostalPostCode" ErrorMessage="Postcode is Required." 
    ToolTip="Postcode is required." ValidationGroup="vgRegistration" >* Required</asp:RequiredFieldValidator> 
<asp:RegularExpressionValidator ID="revPostalPostCode" runat="server" ControlToValidate="txtPostalPostCode" ErrorMessage="Postcode is invalid" 
    ToolTip="Postcode is invalid." ValidationExpression="^([0-9]){4}?$" ValidationGroup="vgRegistration" >* Invalid Postcode</asp:RegularExpressionValidator> 
</span> 

JavaScript

<script type="text/javascript"> 
    function updateValidator() { 
     var enableValidator = !event.srcElement.checked; 
     var rfvPostalAddress = document.getElementById('<%= rfvPostalAddress.ClientID %>'); 
     var rfvPostalSuburb = document.getElementById('<%= rfvPostalSuburb.ClientID %>'); 
     var rfvPostalCity = document.getElementById('<%= rfvPostalCity.ClientID %>'); 
     var rfvPostalPostcode = document.getElementById('<%= rfvPostalPostcode.ClientID %>'); 
     spanPostalAddress.hidden = !enableValidator; 
     ValidatorEnable(rfvPostalAddress, enableValidator); 
     ValidatorEnable(rfvPostalSuburb, enableValidator); 
     ValidatorEnable(rfvPostalCity, enableValidator); 
     ValidatorEnable(rfvPostalPostcode, enableValidator); 
    } 
</script> 

Это View Source формируют страницу при работе в браузере. Я вырезал несколько бит, чтобы сделать его лучше, но ничего не переделал.

Source from webpage

Я не могу взять его из пользовательского элемента управления.

Спасибо за любую помощь.

Из того, что я могу сказать, происходит то, что полностью игнорируется, поэтому javascript, хотя и технически существует, рассматривается как JavaScript.

У меня возникла мысль о перемещении JavaScript и внешнего файла, но тогда ClientID не скомпилируется, поэтому я не могу ссылаться на Validators, чтобы отключить их.

+0

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

+0

Я только что загрузил изображение источника страницы. – Seige

+0

Прежде всего, я рекомендую привязать обработчик к событию onchange при работе с флажками или переключателями. Теперь попробуйте определить функцию updateValidator следующим образом: window.updateValidator = function() {your code ...} и посмотреть, все еще не определено при возникновении события –

ответ

0

Лучшим решением будет добавить обработчик для флажка непосредственно в сценарии JavaScript на стороне клиента и не полагаться на события ASP.

Для этого

  1. Удалить атрибут из CheckBox элемента в разметке ASP/HTML.

  2. Добавьте ClientIDMode = «Static» атрибут для управления CheckBox, так что вы можете ссылаться на элемент из яваскрипта кода безопасно

  3. Закрепить updateValidator обработчик непосредственно в теге сценария, чтобы сделать это:

После функции updateValidator поместить этот код:

window.onload = function() { 
    var original = window.onload || null; 

    document.getElementById('checkboxPostalPhysicalSame').onchange = updateValidator; 

    // Call the previous window.onload function to avoid loosing functionality from previous javascript code 
    if (original !== null) original(this); 
} 

Если updateValidator является унд efined ошибка по-прежнему появляется, попробуйте объявить функцию как это:

var updateValidator = function() { the function code... } 

или как это:

window.updateValidator = function() { the function code... }