此方法响应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>
答案 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);
});