我有以下脚本要求用户确认单击按钮,具体取决于系统设置。
系统设置存储在隐藏的字段集中。
标记:
<asp:HiddenField ID="hfConfirmOnApproval" runat="server" Value="False" />
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,也会显示确认消息框?
如果设置为true,我只希望显示消息框。
目前_ConfirmOnApproval为false
解决方案:
JS:
var _confirmOnApproval = $('#<%=hfConfirmOnApproval.ClientID %>').val() == "True" ? true : false;
if ( _confirmOnApproval ? confirm('Are you sure you want to approve this item?') : true ) {
//Do work
}
答案 0 :(得分:2)
这是因为您使用new Boolean
创建了一个布尔对象,typeof _confirmOnApproval
将返回“对象”:
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")
答案 1 :(得分:1)
除了James的答案之外,您还必须更改现有代码以明确检查布尔条件,如
var _confirmOnApproval = new Boolean($('#hfConfirmOnApproval').val());
if ( _confirmOnApproval === true ? confirm('Are you sure you want to approve this item?') : true )
{
// do work
}
答案 2 :(得分:0)
我认为问题在于它总会有一个值...尝试取该值的长度,这可能会有效。
答案 3 :(得分:0)
asp:HiddenField ID
属性并不总是与input id
属性完全相同。
答案 4 :(得分:0)
试试这个:
var _confirmOnApproval = $('input[type=hidden][id$=hfConfirmOnApproval]').val();
if ( _confirmOnApproval === "False" ? confirm('Are you sure you want to approve this item?') : true )
{
// do work
}