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 に答える