0

我正在使用 jQuery 禁用下拉列表。这很奇怪——当我在 firebug 中添加断点时它工作正常!但是,如果我只是运行它,我会看到它在几分之一秒内被禁用,然后又被重新启用!

基本上:

我想禁用列表 if ($("#MessageTypes").val() == 'Text To Speech')

不知道为什么它不粘住..如果我取出 $.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
        }

    });

});

4

2 回答 2

2

$.get是异步的,因此它会在禁用选项的代码运行后触发其回调。您需要将该代码移动到回调中。

于 2012-08-29T17:38:07.480 回答
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);})

这是同步与异步执行的问题。$.get 之后的行继续执行而不等待响应,除非它是回调。

于 2012-08-29T17:44:30.857 回答