Как написать скрипт для выбора страны в поле ввода телефона?

Поделитесь, пожалуйста, скриптом для выбора страны в телефонном поле. Я использую intlTelInput, но сталкиваюсь с проблемами. В этом скрипте код страны идет вместе с названием, и если я убираю названия стран, то они исчезают из выпадающего списка. 

Мне нужно реализовать, чтобы в результате был отображен флаг страны, код страны и поле для ввода номера телефона. 

Каждый раз, когда я пробую что-то новое, возникают проблемы: либо выбор страны отображается в значении (value), что усложняет стилизацию, либо возникают другие трудности. 

Как мне добиться желаемого результата?
  • 11 сентября 2024 г. 15:43
Ответы на вопрос 3
Для реализации выбора страны с помощью библиотеки `intlTelInput` и обеспечения корректного отображения кода страны, флага и номера телефона, можно использовать следующий подход.

### Установка библиотеки

Сначала убедитесь, что у вас уже установлены необходимые библиотеки `intlTelInput` и `jQuery`. Вот пример подключения через CDN:

```html
<!-- Подключаем необходимые стили и скрипты -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/css/intlTelInput.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/intlTelInput.min.js"></script>
```

### HTML-разметка

Создайте простую разметку для поля ввода телефона:

```html
<input type="tel" id="phone" placeholder="Введите номер телефона">
```

### JavaScript для настройки `intlTelInput`

Теперь создайте скрипт, который инициализирует `intlTelInput` и настраивает его отображение:

```javascript
$(document).ready(function() {
    $("#phone").intlTelInput({
        initialCountry: "auto", // автоматически определит страну по IP
        geoIpLookup: function(callback) {
            $.get('https://ipinfo.io', function() {}, 'jsonp').always(function(resp) {
                var countryCode = (resp && resp.country) ? resp.country : "US"; // по умолчанию - США
                callback(countryCode);
            });
        },
        utilsScript: "https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/lib/libphonenumber/build/utils.js" // для форматов
    });

    // В случае, если нужно обновить формат при изменении значения
    $("#phone").on("change", function() {
        var countryData = $("#phone").intlTelInput("getSelectedCountryData");
        console.log("Selected country code: " + countryData.iso2 + ", Phone code: " + countryData.dialCode);
    });
});
```

### CSS для стилизации (опционально)

Обязательно добавьте стили для корректного отображения, если вам нужно изменить дизайн по своему вкусу. Например:

```css
/* Пример дополнительных стилей (добавьте при необходимости) */
.iti {
    width: 100%; /* Задать ширину контейнера */
}
```

### Итоговый код

Вот полная версия кода:

```html
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/css/intlTelInput.css">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/intlTelInput.min.js"></script>
    <title>Телефонный ввод</title>
</head>
<body>

<input type="tel" id="phone" placeholder="Введите номер телефона">

<script>
$(document).ready(function() {
    $("#phone").intlTelInput({
        initialCountry: "auto",
        geoIpLookup: function(callback) {
            $.get('https://ipinfo.io', function() {}, 'jsonp').always(function(resp) {
                var countryCode = (resp && resp.country) ? resp.country : "US";
                callback(countryCode);
            });
        },
        utilsScript: "https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/lib/libphonenumber/build/utils.js"
    });

    $("#phone").on("change", function() {
        var countryData = $("#phone").intlTelInput("getSelectedCountryData");
        console.log("Selected country code: " + countryData.iso2 + ", Phone code: " + countryData.dialCode);
    });
});
</script>

</body>
</html>
```

### Примечания

1. Если вы хотите работать с определёнными странами или изменить стандартный список стран, вы можете изменить опции в настройках `intlTelInput`.
2. Убедитесь, что вы подключили все необходимые зависимости, иначе скрипт работать не будет.
3. Обратите внимание на обработку изменений и получения данных о выбранной стране для дальнейших действий (например, отправки формы).

Этот код поможет вам настроить `intlTelInput` с флагами стран и кодами, а также стилиз
International Telephone Input , Vanilla JS, React, Vue, 7к звиздецов и последнее обновление 3 часа назад, думаю достойный вариант.
Похожие вопросы