除非我先使用alert(),否则jQuery方法不会读取全局变量

时间:2013-10-15 17:53:02

标签: jquery asp.net-mvc-2

此方法响应select元素的OnChange方法。当用户切换到文本模式时,我通知该用户输入的内容将丢失。用户可能决定取消操作并保持他/她所处的任何模式(文本或发布)。

function DisplaySMSElements() { 
        var goSMS = false;
        //  alert(previousAlertType); ==> IMPORTANT

        if ($('#User_AlertType').val() == '<%= (int) AlertType.SMS %>') {
            if(isRichTextMessage)
            {
                if($('#User_Message').val().length > 0)
                {
                    goSMS = confirm('Switching to text mode will 
                             result to data lost. Would you like to proceed?');
                }
                else {
                    goSMS = true;
                }

                if (goSMS) {
                    $('#User_Message').val('');
                    SMSCount = maxSMSCount;
                    isRichTextMessage = false;
                    disableTinyMCE();
                }
                else
                {                        
                    $('#User_AlertType').val(previousAlertType);
                }
            }
        }
        else
        {
            if (isRichTextMessage == false) {
                enableTinyMCE();
                isRichTextMessage = true;
            }
        }
        DisplaySMSCount();
    }

我引入了一个名为previousAlertType的全局变量,当该元素获得焦点时,它保存select元素的值:

$(document).ready(function() {
   $('#User_AlertType').focus(function () {
      previousAlertType = this.value; 
   });
}

页面加载时,previousAlertType的值为Email,即1.

var previousAlertType = '<%= (int)AlertType.Email %>'; 

问题在于它不起作用,除非我使用警报添加我显示它的行(它表示重要的行)。

我添加了警报以检查previousAlertType的值。我完成后,我删除它,方法停止工作。在研究了原因之后,我把它放回去然后这个方法起作用了。我只是不明白这个问题。

感谢您的帮助

编辑:

这是触发上述方法的原因

<select id="User_AlertType" name="User_AlertType" 
         onchange="javascript: DisplaySMSElements()">

         <option value="<%= (int)AlertType.Email %>">Email</option>
         <option value="<%= (int)AlertType.SMS %>">Text</option>
         <option value="<%= AlertType.Post %>">Post</option>
</select>

1 个答案:

答案 0 :(得分:0)

您的问题可能有很多不同之处。您尚未发布显示失败的完整代码集。如果您声明了变量范围问题,那么如果您希望任何人找到解决方案,您需要显示定义变量的范围。

您展示的jQuery代码片段(doc:ready)缺少一个封闭的括号。

这个小问题http://jsfiddle.net/P65B6/1/

var previousAlertType = '<%= (int)AlertType.Email %>'; 

$(document).ready(function() {
   $('#User_AlertType').focus(function () {
      previousAlertType = this.value; 
   }).change(DisplaySMSElements);
});