0

私が抱えている問題 は、コードの直前にアラートがない限り、次のコードが2つの選択ボックス「select1」と「select2」を更新しないことです。

背景情報- このページに 2 つの変数 "sel1val" と "sel2val" を投稿し、それらを ID の "sel1valtry" と "sel2valtry" を持つ非表示の入力ボックスにそれぞれ割り当てています。これらの入力ボックスの値を関数内の変数に割り当て、「sel1val」と「sel2val」という名前を付けました。必要に応じてさらにコードを投稿できますが、それは私が「フランケンコード」と呼んでいるものです...笑! 私は初心者なので、さまざまなスタイルのコードから組み立てられています。

目的- 私が達成しようとしているのは、「sel1val」と「sel2val」の値に基づいて 2 つの選択ボックスを設定することです。コードの前にアラートがある場合にのみ、正しい機能が得られます。

私が試した方法- 私の試みを説明するために、コメントアウトされたコードを残しました。私は多くのフォーラムを経験してきましたが、そこからこれらのアイデアを得ました。アラートがページの JavaScript 部分を「リロード」するのではないかと思いますが、これについての本当の根拠はありません。「ドキュメントの準備完了」、「ウィンドウの読み込み」のバリエーションを試し、タイミングの問題である場合に備えて、遅延して速度を落としてみました. 私が試した方法はどれも同じ結果になり、アラートでのみ機能します。

私は Web ベースのプロジェクトで多くの成功を収めてきましたが、このようなフォーラムの貴重なリソースがなければ、これは不可能でした。これまでに情報や解決策を提供してくれた人に感謝したいと思います。これがなければ、私は前進できなかったでしょう。

$(document).ready(function(){
//  $(document).ajaxSuccess(function(){
//    alert("AJAX request successfully completed");
//  });
//$(window).load(function()
//window.onload = function()
//$(function ()
//Code goes here
//alert("got here");
//{
var sel1val = $("#sel1valtry").val()
var sel2val = $("#sel2valtry").val()

if (sel2val)
{
//alert("will not work without this alert"+sel1val);    

//$("#select1").delay(2000).val(sel1val);
//$("#select1").val(sel1val);
$("#select1").prop('value',sel1val);
//  var element = document.getElementById('select1');
//    element.value = sel1val;
dochange('selection2', sel1val)
//var element = document.getElementById('select2');
//  element.value = sel2val;
alert("will not work without this alert"+sel2val);  
$("#select2").val(sel2val);
}
//}
});
//}
4

1 に答える 1

4

関数は、成功コールバックで変数にdochange値を設定する非同期 API (たとえば、AJAX 呼び出しなど) を使用しているようです。sel2valただし、AJAX は非同期であるため、この関数はサーバーが応答を返すのを待たずにすぐに戻ります。アラートを出すことで、コードの次の行の実行をブロックし、AJAX 呼び出しが完了してsel2val変数に値を割り当てるのに十分な時間を残します。

コードを修正する適切な方法は、必要なアクションを実行するこの関数にコールバックを提供することです。

dochange('selection2', sel1val, function(result) {
    $("#select2").val(result);
});

関数でdochangeは、AJAX 呼び出しの成功イベントでこのコールバックを呼び出します。

于 2013-05-17T06:25:45.160 に答える