2012-08-29 35 views
0

我正在使用jQuery來禁用下拉列表。這非常奇怪 - 當我在螢火蟲中添加斷點時,它工作正常!但是,如果我只是運行它,我發現它在幾分之一秒內被禁用,然後重新啓用!使用JQuery禁用下拉列表立即恢復

基本上是:

我要禁用列表中,如果($( 「#MessageTypes」)VAL()== '文本到語音'。)

不知道爲什麼它不堅持.. 如果我拿出$ .get行,它工作正常。 爲什麼會重置它?特別是因爲我在該代碼後禁用列表?

在此先感謝!

<script type="text/javascript"> 
$().ready(function() { 

    $("#MessageTypes").change(function() { 

     var sMessageType = $("#MessageTypes").val(); 
     $.get('@Url.Action("GenerateMessageDesc")', { messageType: sMessageType }, function (data) { $('#MessageDesc').replaceWith(data); }); 

     //Text To Speech Chosen 
     if ($("#MessageTypes").val() == 'Text To Speech') { 
      $("#MessageDesc").val('5'); //5 is TEXT ID from database -- prob not best practice 
      $("#MessageDesc").attr("disabled", true); //disable select 
      $("#MessageContent").removeAttr("disabled"); //Enable Message Content 
     } 

    }); 

});

回答

0

使用

$.ajax({ 
    data: ..., type: ..., url: ..., 
    success: function(){ //disable here.. } 
}); 

或者

$.get('@Url.Action("GenerateMessageDesc")', { messageType: sMessageType }, 
    function (data) { $('#MessageDesc').replaceWith(data);    
     //other necessary computations 
     $("#MessageDesc").attr("disabled", true);}) 

這與同步V/S異步執行的問題。 $ .get之後的行繼續執行而不等待響應,除非它是回調。

+0

我移動了;})來包含整個調用,就像你說的那樣,它工作。 – Zenacity

+0

很高興幫助:) – karthikr

2

$.get是異步的,所以它在代碼禁用選項運行後觸發它的回調。您需要將該代碼移到回調中。