2011-01-04 2 views
3

В настоящее время я пытаюсь убедиться, что число, введенное в текстовое поле, делится на 1,25 или 1,5. Способ, которым я определяю погоду, - это число, равное 1,25 или 1,5, зависит от того, что находится в другом выпадающем списке. Например: если выбранный индекс DDL равен 1, I mod - 1,5, если он равен 2 I mod на 1,25.ASP.NET - пользовательский валидатор с динамическим ErrorMessage

Однако мне нужно показать пользователю причину ошибки. Сообщение об ошибке пользовательского валидатора должно быть чем-то вроде «Номер должен быть дешифрован на 1,25» или наоборот.

От того, что я могу сказать, код должен работать. Но это не так. Я читал на другом форуме, который берет источник и делает innerText сообщение об ошибке должно делать трюк. Но я должен что-то делать неправильно. Когда я перехожу через свою функцию javascript, он проходит отлично. Просто сообщение об ошибке. Вот мой код:

<asp:CustomValidator ID="ValidateFinHeight" runat="server" CssClass="NormLabel" 
Display="Dynamic" 
ControlToValidate="txtFinHeight" 
ClientValidationFunction="validateFinHeight"></asp:CustomValidator> 

<script type="text/javascript" language="javascript" > 
function validateFinHeight(source, arguments) 
{ 
    var ddl = document.getElementById('cboTubeDia'); 
    var ddlSelIndex = ddl.selectedIndex 

    switch(ddlSelIndex) 
    { 
    case 0: 
     arguments.isValid = true; 
     return;  
    case 1: 
     if(arguments.value%1.25 != 0) 
     { 
      source.innerText = "Height must be divisibly by 1.25"; 
      arguments.isValid = false; 
      return; 
     } 
     else 
     { 
      arguments.isValid = true; 
      return; 
     } 
    case 2: 
     if(arguments.value%1.5 != 0) 
     { 
      source.innerText = "Height must be divisibly by 1.5"; 
      arguments.isValid = false; 
      return; 
     } 
     else 
     { 
      arguments.isValid = true; 
      return; 
     } 
    } 
} 
</script> 
+0

Вы упомянули, что число равно 1,25, если selectedindex равно 2 и 1.5, если selectedindex равно 1, но в вашей функции javascript вы проверяете наоборот. Не важно для ответа на ваш вопрос. –

ответ

5

Существовало несколько мелких ошибок в вашем яваскрипте функций в соответствии с чувствительностью к регистру (f.e IsValid и Value.). Я отлаживал его, чтобы узнать, какое свойство Error-Span я должен установить. Это был атрибут textContent для Firefox и innerText для IE.

Рабочая функция (кросс-браузер, способный):

function validateFinHeight(source, args) { 
     var ddl = document.getElementById('cboTubeDia'); 
     var ddlSelIndex = ddl.selectedIndex; 
     var errorMsg = ""; 

     switch (ddlSelIndex) { 
      case 0: 
       args.IsValid = true; 
       return; 
      case 1: 
       if (args.Value % 1.25 != 0) { 
        errorMsg = "Height must be divisibly by 1.25"; 
        if (source.innerText) { 
         source.innerText = errorMsg; 
        } else { 
         source.textContent = errorMsg; 
        } 
        args.IsValid = false; 
        return; 
       } 
       else { 
        args.IsValid = true; 
        return; 
       } 
      case 2: 
       if (args.Value % 1.5 != 0) { 
        errorMsg = "Height must be divisibly by 1.5"; 
        if (source.innerText) { 
         source.innerText = errorMsg; 
        } else { 
         source.textContent = errorMsg; 
        } 
        args.IsValid = false; 
        return; 
       } 
       else { 
        args.IsValid = true; 
        return; 
       } 
     } 
    } 
+3

Спасибо, очень очень! – Johnrad

+0

Почему мы не оставляем такие проблемы с crossbrowser на jQuery? просто используйте $ (src) – KMX

4

К сожалению, не могу комментировать другие ответы в качестве гостя. Я хотел бы указать на проблему с Вопросом, а также с ответами Tims:

Использование «аргументов» в качестве имени параметра может привести к проблемам (по крайней мере, я просто испытал это в firefox 20), поскольку это также auto-variable, которая содержит все аргументы, которые передаются функции, поэтому существует конфликт имен, если параметр называется так же. Я рекомендую изменить имя параметра на «args» или что-то еще.

+1

+1 Я отредактировал свой ответ соответственно. Благодарю. –

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