任何人都可以看到这个js / jQuery有什么问题吗?

时间:2011-10-28 10:00:22

标签: javascript jquery asp.net

我有以下脚本要求用户确认单击按钮,具体取决于系统设置。

系统设置存储在隐藏的字段集中。

标记:

<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
}

5 个答案:

答案 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

}