Проверка совместимости браузера с HTML5 перед выбором типа поля ввода

Скажем, у меня есть код JavaScript, который выглядит так:

 function CheckDateField()
    {
    if (!Modernizr.inputtypes.date) {
        $(function () {
            $(".datefield").datepicker();
        });
    }
    }

Это проверяет, совместима ли версия браузера с HTML 5, и в этом случае использует поле даты; еще текстовое поле.

В моем представлении .NET Core есть такое поле:

<div class = "form-group">
                <label asp-for = "DOB" class = "control-label"></label>
                @*@Html.TextBox("datepicker")*@
                @Html.TextBox("datepicker", null, new { @readonly = "readonly" })

Как использовать поле в JavaScript? Я пробовал это:

<label asp-for = "DOB" class = "control-label" onload = "CheckDateField()"></label>

Было бы хорошо, если возможно, поместить JavaScript прямо в лавочку. Я потратил два часа на поиск в Google и попробовал несколько вещей, которые не сработали.

вам нужно будет добавить класс datepicker в текстовое поле, иначе jQuery не будет работать с ним. Насколько я знаю, на этикетке нет события "загрузки". Вместо этого просто запустите функцию CheckDateField, как только DOM будет готов, используя блок jquery document.ready

ADyson 23.10.2018 10:51

Этот селектор $(".datefield") не найдет никаких элементов в вашей текущей разметке. Где вы устанавливаете класс datefield для input?

melancia 23.10.2018 11:03

Кроме того, вместо проверки функции onload() сделайте это в $(function () { });.

melancia 23.10.2018 11:04

Как это: jsfiddle.net/bhwog7a9 Если это то, что вы ищете, я могу опубликовать ответ.

melancia 23.10.2018 11:13

@melancia, да, пожалуйста. Функция JavaScript не завершается, потому что сообщает, что Modernizr не найден. Какой скрипт мне нужно добавить для Modernizr? Это: bootstrap.js?

w0051977 23.10.2018 12:20

@ADyson, см. Мой комментарий выше. Как мне найти Modernizr? Спасибо.

w0051977 23.10.2018 12:22

Вам необходимо включить библиотеку Modernizr, как и другие (например, jQuery). modernizr.com

melancia 23.10.2018 12:40

Спасибо. Я установил его (через диспетчер библиотек), и теперь он, похоже, работает. Я полагаю, это не часть шаблона .NET Core 2.1?

w0051977 23.10.2018 12:44

Я еще не очень хорошо знаком с .NET Core, но я опубликовал ответ. Надеюсь, это поможет.

melancia 23.10.2018 13:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
9
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете упростить свой код, просто проверив функцию HTML5 input date при загрузке страницы и действуя соответствующим образом. Кроме того, селектор, который вы используете для захвата элемента, не будет работать, поскольку input не имеет установленного класса datefield.

Созданная вами разметка будет выглядеть примерно так:

<label for = "dob">Date of birth</label>
<input type = "date" name = "dob" id = "dob" class = "datefield">

Обратите внимание на отсутствие обработчика событий onload и то, что для начала вы устанавливаете input type на date.

Ваш бит скрипта для обработки datepicker должен быть похож на этот:

// When the document is ready.
$(function () {
    // If input type date isn't supported.
    if (!Modernizr.inputtypes.date) {
        var el = $(".datefield");

        // In a single call (chained) set the input type to text
        // and attach the datepicker.
        el.prop("type", "text").datepicker();
    }
});

Демо

Спасибо. Это работает +1. Есть ли какие-либо последствия изменения класса с «управления формой» на «поле даты» на стороне сервера в соответствии с вашим ответом? +1.

w0051977 23.10.2018 13:53

Вы можете изменить селектор по своему усмотрению. Подробнее здесь: Селекторы CSS

melancia 23.10.2018 14:38

Спасибо. Я задал следующий вопрос, если вам интересно: stackoverflow.com/questions/52949847/…

w0051977 23.10.2018 16:29

Другие вопросы по теме