если кондиционирование продолжает передаваться, даже когда строка пуста в javascript

#javascript #jquery

#javascript #jquery

Вопрос:

Мне интересно, чего мне здесь не хватает, это должно быть что-то очевидное.

Все, что я хочу, это чтобы маркер не появлялся, если еще не введены координаты.

     var lat = jQuery('#latitude').val();
    var lng = jQuery('#longitude').val();

    alert(lat);
    alert(lng);

    if (lat.length != 0) {
     alert('shouldnt be happening');
     var latlng = new google.maps.LatLng(
      parseFloat(lat),
      parseFloat(lng)
     );
    var marker = new google.maps.Marker({
     map: map,
     position: latlng 
   });   

  }
  

Независимо от того, является поле ввода пустым или нет, if условие продолжает передаваться.

Я также пытался if (lat != '') {}

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

Спасибо.

Редактировать:

Чтобы упростить это, я ввел этот код, странная вещь сейчас заключается в том, что происходят все 3 предупреждения.

 var lat = jQuery.trim(jQuery('#latitude').val());
var lng = jQuery.trim(jQuery('#longitude').val());
var zoom = 7;
alert(lat);
alert(lng);

if (lat.length == 0) {
    lat = 53.412;
    zoom = 6;
    alert('THERE IS NO LATITUDE SET');
}

if (lng.length == 0) {
    lng = -8.243;
    zoom = 6;
    alert('THERE IS NO LONGITUDE SET');
}

 if (lat.length != 0) {
    alert('now this shouldnt be happening');
 }
  

Комментарии:

1. Не могли бы вы записать длину строки и код первого символа? console.log(lat.charCodeAt(0)); Возможно, ваша строка состоит из невидимых символов

2. «Пустое всплывающее окно» не доказывает пустоту. Доказательство: alert(" tnr r t x01x02x03x04x05");

3. Возможно, у вас есть пробелы в поле ввода. Попробуйте проверить фактическую длину и / или использовать String.trim

4. Да, попробуйте это вместо этого: var lat = jQuery.trim(jQuery(‘#latitude’).val());

5. Прошу прощения, я идиот!

Ответ №1:

Я предлагаю использовать более защитный код:

 var lat = jQuery('#latitude').val() || "";
var lng = jQuery('#longitude').val() || "";
  

Затем:

 if (lat.length != "") {
   ...
}
  

val() во многих случаях может возвращать значение null, используя || ""; вы убедитесь, что у вас есть определенное значение ожидаемого типа при инициализации var.

Кроме того, я думаю, что лучше заменить val() на:

 attr("value") 
  

Ответ №2:

Это методы сокращенного кодирования Javascript.

Когда вы получаете переменную,

 var lat = jQuery('#latitude').val();
var lng = jQuery('#longitude').val();
  

Когда вам нужно проверить ее длину, вам нужно сначала проверить наличие этих условий,

null, неопределенный и пустой

Таким образом, вы можете проверить, как,

 if( lat !== null amp;amp; lat !== undefined amp;amp; lat !== "" amp;amp; lat.length !== 0 ) {
    //do something
}
  

Рекомендуется использовать «Строгое равенство» при проверке на равенство.

Сокращенный метод проверки вышеуказанных условий,

 if( lat || "" ){ 
    //Do Something
}
  

У меня есть коллекция методов сокращения JavaScript, на которые вы можете сослаться. Ссылка