2013-10-15 28 views
0

此方法響應select元素的OnChange方法。當用戶切換到文本模式時,我通知該用戶輸入的內容將會丟失。用戶可能決定取消操作並保留他/她所在的任何模式(文本或發佈)。jQuery方法不會讀取全局變量,除非我首先使用alert()

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的價值是電子郵件,這是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

聽起來像一個競爭條件。什麼觸發'DisplaySMSElements'? –

+0

@KevinB,請參閱更新。 – Richard77

回答

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