asp.net mvc: разница между выпадающим списком и событием замены текстового поля - PullRequest
0 голосов
/ 03 февраля 2010

Имея некоторую боль с этим событием, у меня есть такой код для выпадающего списка:

return helper.DropDownList(data.ModelEntityId.ToString(), selectList, "<Select>", new { onChange = onChange });

где onChange - это переменная, содержащая функцию javascript для запуска, это прекрасно работает. Однако в текстовой версии (ниже) событие onchange вызывается при загрузке страницы (в отличие от DropdownList, другое поведение раздражает). Когда функция javascript вызывается во время загрузки страницы, я получаю сообщение об ошибке: Javascript "undefined" не может быть найден ... (впоследствии он работает)

return helper.TextBox(data.ModelEntity.ModelEntityId.ToString(), data.ValueText, new { onchange = onChange });

Пример javascript

function SuitabilityChecked(providerId, checkId, parentId) {
            alert("meep"); // just to test error still occurs
        };

Есть ли другое событие, которое я должен использовать для текстового поля, или что-то "особенное, что мне нужно сделать?

1 Ответ

4 голосов
/ 03 февраля 2010

Вы можете полностью избежать этой проблемы, ненавязчиво (не встроенно) применяя ваши обработчики после завершения загрузки страницы. Стандартный способ сделать это в MVC - с помощью jQuery.

 <script type="text/javascript">
    $(function() {
         $('input#<%= data.ModelEntity.ModelEntityId %>').change( function() {
              ...
         });
    });
 </script>

Использование классов сделало бы еще проще применение обработчиков только к определенным элементам, если это необходимо - просто добавьте определение класса в хеш-код htmlAttributes в помощнике и измените селектор в загруженном обработчике, чтобы применить обработчик изменений только к те элементы с выбранным классом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...