Переход в одно и то же условие javascript if независимо от значения данной переменной

#javascript #asp.net

#javascript #asp.net

Вопрос:

Даже если значение

isAdmin = false

Код не входит в условие

 if(!isAdmin)
  

В результате я не получаю желаемого результата.
Вот как показано ниже, если вызывается в asp.net :

    <span onclick="DisplayPrdWeightGrd('<%#Container.ItemIndex   1 %>','<%# Eval("OrderId")%>','<%= Convert.ToBoolean(Utility.IsAdmin()) %>');">
  

 function DisplayPrdWeightGrd(index, OrderId, isAdmin) {
  $.ajax({
type: "POST",
url: "../handlers/DisplayOrderDetail.ashx?OrderId="   Orderid   "amp;tk="   $.now(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
  if ($('#tableOrderDetail_'   index   ' tr').length <= 1) {
    $.each(data, function(i, v) {
      setDataOnRow(index, v, i);
    });
  }
},
failure: function(response) {
  alert("fail");
},
error: function(response) {
  alert(response);
}
  });

  function setDataOnRow(idx, v, i) {

var totalprice;
if (v.IsGST == true) {
  totalprice = parseFloat(v.TotalPrice * (1.1)).toFixed(2);
} else {
  totalprice = parseFloat(v.TotalPrice).toFixed(2);
}

//debugger;

var obj = $('#tableOrderDetail_'   idx   ' tr td table:last');
if (!isAdmin) {
  $('#tableOrderDetail_'   idx   ' tr:last').after('<tr>'  
    '<td  width="25%" >'   (i   1)   '</td>'  
    '<td  width="25%" class="center">'   v.ProductName   '</td>'  
    '<td width="12%" class="center">'   v.NoOfCarton   '</td>'  
    '<td width="12%" class="center">'   v.ProductQuantity   '</td>'  
    '<td width="12%" class="center">'   v.OriginalPrice   '</td>'  
    '<td width="12%" class="center">'   v.OrderPrice   '</td>'  
    '<td width="10%" class="center">'   v.IsGST   '</td>'  
    '<td width="10%" class="center">'   v.Discount   '</td>'  
    '<td width="12%" class="center">'   totalprice   '</td></tr>');
} else {
  $('#tableOrderDetail_'   idx   ' tr:last').after('<tr>'  
    '<td  width="25%" >'   (i   1)   '</td>'  
    '<td  width="25%" class="right">'   v.ProductName   '</td>'  
    '<td width="12%" class="right">'   v.NoOfCarton   '</td>'  
    '<td width="12%" class="right">'   v.ProductQuantity   '</td>'  
    '<td width="12%" class="right">'   v.OriginalPrice   '</td>'  
    '<td width="12%" class="right">'   v.OrderPrice   '</td>'  
    '<td width="10%" class="right">'   v.IsGST   '</td>'  
    '<td width="10%" class="center">'   v.Discount   '</td>'  
    '<td width="12%" class="center">'   totalprice   '</td></tr>');
}
  }  

Я пробовал отладчик, он всегда выполняется, если условие для значения isAdmin равно true или false. Застрял здесь.

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

1. Если я меняю на if (isAdmin), то это происходит в условии, а не в другом. ответ наоборот

2. проверьте тип isAdmin. Если это строка, то она всегда будет входить в условие if.

3. хорошо, его тип отображается как string

4. Я опубликовал ответ, чтобы преобразовать его в логическое значение, а затем проверить.

Ответ №1:

Вы устанавливаете значение этого isAdmin параметра в виде строки. Таким образом, проверка внутри «if» проверяет «истинное» значение строки, которое является любым ненулевым / непустым значением. Таким образом, оба значения 'True' и 'False' будут рассматриваться как true .

Чтобы решить эту:

  1. удалите кавычки вокруг <%= Convert.ToBoolean(Utility.IsAdmin()) %>
  2. убедитесь, что вы получили true и false (в нижнем регистре!). Возможно, вам потребуется добавить .ToString().ToLowerInvariant() . Или (угадывая эту утилиту.isAdmin() возвращает bool): <%= Utility.IsAdmin() ? "true" : "false" %>

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

1. использование точки удаления кавычки не вызывает DisplayPrdWeightGrd вообще

2. @HinaKhuman Это было написано True (заглавная буква T) или true (строчная буква)? (оно должно быть в нижнем регистре) Что на самом деле находится в сгенерированном html / javascript? Какие-либо ошибки в консоли javascript?

Ответ №2:

Попробуйте

 var isAdmin = Boolean(isAdmin);
  

затем проверьте условие if-else.

 if(!isAdmin)
  

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

1. Все та же ситуация, она не входит в блок условий If (!isAdmin)

2. @HinaKhuman каков результат console.log (typeof isAdmin, isAdmin) после преобразования.

3. var Admin = typeof(isAdmin); дает мне строковый тип

4. var isAdmin = Boolean(isAdmin); console.log(typeof isAdmin, isAdmin); теперь что утешается? скопируйте и вставьте ту же строку, что и в комментарии.

5. в обоих случаях, таких как Saler или Admin, оно дает истинное значение. var Admin = Логическое значение (isAdmin); оповещение (Admin);

Ответ №3:

Существует isAdmin только внутри вашего вызова ajax, поэтому ваша setDataOnRow функция не распознает его, поэтому всегда переходите к else

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

1. Нет, он входит в setDataOnRow . Я установил оповещение внутри этой функции. предупреждение выдает точное значение

Ответ №4:

 function DisplayPrdWeightGrd(index, OrderId, isAdmin) {       var Admin = isAdmin.toLowerCase();

  $.ajax({
type: "POST",
url: "../handlers/DisplayOrderDetail.ashx?OrderId="   Orderid   "amp;tk="   $.now(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
  if ($('#tableOrderDetail_'   index   ' tr').length <= 1) {
    $.each(data, function(i, v) {
      setDataOnRow(index, v, i);
    });
  }
},
failure: function(response) {
  alert("fail");
},
error: function(response) {
  alert(response);
}
  });

  function setDataOnRow(idx, v, i) {

var totalprice;
if (v.IsGST == true) {
  totalprice = parseFloat(v.TotalPrice * (1.1)).toFixed(2);
} else {
  totalprice = parseFloat(v.TotalPrice).toFixed(2);
}

//debugger;

var obj = $('#tableOrderDetail_'   idx   ' tr td table:last');
if (Admin === "false") {
  $('#tableOrderDetail_'   idx   ' tr:last').after('<tr>'  
    '<td  width="25%" >'   (i   1)   '</td>'  
    '<td  width="25%" class="center">'   v.ProductName   '</td>'  
    '<td width="12%" class="center">'   v.NoOfCarton   '</td>'  
    '<td width="12%" class="center">'   v.ProductQuantity   '</td>'  
    '<td width="12%" class="center">'   v.OriginalPrice   '</td>'  
    '<td width="12%" class="center">'   v.OrderPrice   '</td>'  
    '<td width="10%" class="center">'   v.IsGST   '</td>'  
    '<td width="10%" class="center">'   v.Discount   '</td>'  
    '<td width="12%" class="center">'   totalprice   '</td></tr>');
} else {
  $('#tableOrderDetail_'   idx   ' tr:last').after('<tr>'  
    '<td  width="25%" >'   (i   1)   '</td>'  
    '<td  width="25%" class="right">'   v.ProductName   '</td>'  
    '<td width="12%" class="right">'   v.NoOfCarton   '</td>'  
    '<td width="12%" class="right">'   v.ProductQuantity   '</td>'  
    '<td width="12%" class="right">'   v.OriginalPrice   '</td>'  
    '<td width="12%" class="right">'   v.OrderPrice   '</td>'  
    '<td width="10%" class="right">'   v.IsGST   '</td>'  
    '<td width="10%" class="center">'   v.Discount   '</td>'  
    '<td width="12%" class="center">'   totalprice   '</td></tr>');
}
  }  

Это решило мою проблему, используя следующие две строки: 1. В функции

функция DisplayPrdWeightGrd(индекс, OrderID, isAdmin)

Добавить

  var Admin = isAdmin.toLowerCase();
  

2 В функции

функция setDataOnRow(idx, v, i)

добавьте условие if как

     if(Admin==="false")
  

Спасибо за обсуждение.