Чи може хто-небудь побачити щось не так з цим js/jQuery?

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

Параметри системи зберігаються у прихованому наборі поля, що знаходиться позаду коду.

Розмітка:


cs:

//Read the confirm on approval setting
hfConfirmOnApproval.Value = Objects.Engine.Settings.Instance.ConfirmOnApproval.ToString();

JS:

//Get whether to confirm on approval
var _confirmOnApproval = new Boolean($('#hfConfirmOnApproval').val());

if ( _confirmOnApproval ? confirm('Are you sure you want to approve this item?') : true ) 
{

   //do work

}

Проблема полягає в тому, що вікно підтвердження повідомлення відображається, навіть якщо для _confirmOnApproval встановлено значення false?

Я хочу, щоб вікно повідомлення з'явилося, якщо воно встановлено як істина.

_ConfirmOnApproval на даний момент є помилковим

РІШЕННЯ:

JS:

var _confirmOnApproval = $('#<%=hfConfirmOnApproval.ClientID %>').val() == "True" ? true : false;

if ( _confirmOnApproval  ? confirm('Are you sure you want to approve this item?') : true ) {
//Do work
}
1

5 Відповіді

Це тому, що ви використали new Boolean , щоб створити логічний об'єкт, і typeof _confirmOnApproval поверне "Object":

var x = new Boolean(false); //Boolean object
if(x) {
   console.log("hello"); //This will always execute
}
var y = false; //Literal boolean primitive
if(y) {
   console.log("hello"); //This won't
}

Ви можете позбутися new Boolean і просто порівняти значення:

if(_confirmOnApproval == "False")
2
додано
Так, це повинно добре працювати!
додано Автор James Allardice, джерело
ах, добре, так це через нове булеве ("") конструктор, в такому випадку яким чином я повинен його проаналізувати? чи буде ця робота ... var _confirmOnApproval = $ ('# hfConfirmOnApproval'). val() == "True"? правда: помилково;
додано Автор WraithNath, джерело
Або навіть просто var _confirmOnApproval = ($ ('# hfConfirmOnApproval'). Val() == "True");
додано Автор cspolton, джерело

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

var _confirmOnApproval = new Boolean($('#hfConfirmOnApproval').val());
if ( _confirmOnApproval === true ? confirm('Are you sure you want to approve this item?') : true ) 
{
   //do work
}
1
додано
Спасибі, отримали його відсортовані зараз :)
додано Автор WraithNath, джерело

атрибут asp: HiddenField ID не завжди точно такий, як атрибут id id .

0
додано

Я думаю, що проблема полягає в тому, що вона завжди буде мати значення ... спробуйте взяти довжину цієї вартості, що, ймовірно, працюватиме.

0
додано
Ви маєте на увазі, якщо (_confirmOnApproval.Length = 4? Підтвердити ('...'): true) його bool тому він повинен працювати !?
додано Автор WraithNath, джерело

Спробуйте це:

var _confirmOnApproval = $('input[type=hidden][id$=hfConfirmOnApproval]').val();

if ( _confirmOnApproval === "False" ? confirm('Are you sure you want to approve this item?') : true ) 
{

   //do work

}
0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug

ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram