У меня есть форма на моей странице содержания, для которой я делаю некоторые клиентские проверки с помощью JavaScript. JavaScript ведет себя как ожидалось, если я помещаю код JS непосредственно в страницу содержания. Но если я помещаю код JS в свой собственный файл и пытаюсь получить доступ к этому от страницы содержания/ведущего устройства (через атрибут src тега script), я получаю ошибку периода выполнения, когда проверка функционирует в JS том, чтобы быть названным.
Чтобы быть конкретным, я добираюсь ниже ошибки. Ошибка периода выполнения Microsoft JScript: Возраженный ожидал/требовал в этой строке - document.getElementById (' <% =txtemailId. % ClientID>') .value
txtemailId находится на странице содержания.
Код JavaScript помещен в validation.js и получен доступ через основную страницу.
Причина, которую я предполагаю, состоит в том, что, когда .NET анализирует файлы, это не может заменить txtemailId. ClientID с клиентским значением, которое было бы сгенерировано позже. Так, как нужно пойти об этом?Спасибо!
Ответ на этот вопрос довольно прост.
На странице содержимого объявите встроенную переменную JScript, убедитесь, что она находится над тегом.
<script>
var emailClientId = <%=txtemailId.ClientID%>;
</script>
В вашем файле include.js используйте глобальную переменную emailClientId
.
Очевидно, что это немного неуклюже, поскольку не весь код JScript содержится в файле include.js, что затрудняет отладку / диагностику, поскольку неясно, откуда именно берется значение. Вы должны четко прокомментировать / задокументировать это в вашем коде, чтобы облегчить обслуживание его кодовой базы в будущем.
Автономные файлы .js не проходят через синтаксический анализатор ASPX, поэтому ваше выражение не оценивается.
Чтобы решить эту проблему, вы можете установить глобальные переменные (или параметры функций, или что-то еще) в файлах ASPX с идентификаторами элементов управления, а затем использовать их в автономном файле .js.
В качестве альтернативы вы можете использовать имена классов (которые не искажаются) вместо идентификаторов. (Это очень просто с использованием jQuery)
Такой подход лучше всего подходит для того, чего вы хотите достичь:
validation.js
var Validation = {
EmailId: null,
Validate: function() {
var email = document.getElementById(EmailId).value;
}
}
page.aspx
Validation.EmailId = '<%=txtemailId.ClientID %>'; //initialize
Validation.Validate(); //whenever you want to validate
Вы правы, код <% = txtemailId.ClientID%>
будет заменен ASP.Net на реальный идентификатор клиента, только если этот код находится в файле ASP.Net . Поэтому, если вы поместите этот javascript в отдельный файл .js, ASP.Net ничего об этом не узнает, и код не будет проанализирован.
Самый простой способ добиться этого - сделать идентификаторы элементов управления параметрами ваших функций. Таким образом, вы можете иметь вызывающий код javascript в вашем файле .aspx (или .ascx) вместе с кодом <% = txtemailId.ClientID%>
.