0

此方法响应选择元素的 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 的全局变量,当这个元素获得焦点时,它保存选择元素的值:

$(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>
4

1 回答 1

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);
});
于 2013-10-15T18:37:03.343 回答