0

単純なjQueryif/ else if条件がありますが、「if」部分のみが機能し、「else if」は機能しないため、理由がわかりません。このコードは3つのリストボックス(ajax-populated)を表しており、いずれかがクリックされると、jQuery関数がクリックされたアイテムのIDを収集し、それを変数に割り当てます。最初のもの(場所を切り替えても正しいID番号を取得します)は問題ありません。2番目または3番目は問題ありません。「if/elseif」構造の代わりに3つの「if」を使用しても機能しません。

$(document).ready(function() {
    $('#btn_edit_details').click(function() {
        var request_id;
        if ($('#lstbx_new_repeat_requests').val().length > 0) {
            request_id = $('#lstbx_new_repeat_requests').val();
            alert(request_id);
        }
        else if ($('#lstbx_approved_repeat_requests').val().length > 0) {
            request_id = $('#lstbx_approved_repeat_requests').val();
            alert(request_id);
        }
        else if ($('#lstbx_declined_repeat_requests').val().length > 0) {
            request_id = $('#lstbx_declined_repeat_requests').val();
            alert(request_id);
        }
if ($('#btn_edit_details').val() == 'edit') {
// rest of the code, working fine when the request_id is passed from the first "if"

そしてHTML

<input type='button' id='btn_edit_details' value='edit' />
<select id='lstbx_new_repeat_requests' name='lstbx_new_repeat_requests'></select>
<select id='lstbx_approved_repeat_requests' name='lstbx_approved_repeat_requests'></select>
<select id='lstbx_declined_repeat_requests' name='lstbx_declined_repeat_requests'></select>
4

3 に答える 3

1

これを試してください:

$('#btn_edit_details').click(function() {
    var request_id;
    $('select').each(function (index, value) {
        if ($(this).val().length > 0) {
            request_id = $(this).val();
            alert(request_id);
            return;
        }
    });
});
于 2012-08-29T19:37:52.847 に答える
1

あなたにはそれほど賢く見えないかもしれませんが、私はそれが私のために働いた唯一の方法になりましたが、繰り返します-それは私がそれを機能させることができる唯一の方法です...そしてなぜそれがうまくいかなかったのかわかりません本当に基本的なif/else if way。提案やコメントは温かく受け入れられます。ご協力いただきありがとうございます。

3 つのリストボックスのクラスはlstbx_repeat_requests. ユーザーが 3 つのいずれかをクリックすると、その ID がグローバル変数に取り込まれます。次に、次のように switch ステートメントを使用します。

  1. ID をキャプチャします。

    $(document).ready(function() {
    $('.lstbx_repeat_requests').change(function() {
        //assigns a global var
        window.my_config =
        {
            lstbx_id : this.id
        };
    });
    });
    
  2. スイッチステートメント:

    $(document).ready(function() {
    $('#btn_edit_details').click(function() {
    
        var request_id;
        switch(window.my_config.lstbx_id){
            case "lstbx_new_repeat_requests":{
                request_id = $('#lstbx_new_repeat_requests').val();
                alert(request_id + " new");
                break;
            }
            case "lstbx_approved_repeat_requests":{
                request_id = $('#lstbx_approved_repeat_requests').val();
                alert(request_id + " approved");
                break;
            }
            case "lstbx_declined_repeat_requests":{
                request_id = $('#lstbx_declined_repeat_requests').val();
                alert(request_id + " declined");
                break;
            }
        }
        //rest of the code
    
于 2012-08-30T17:06:52.553 に答える
0

実装ロジックに問題があります。

次のケースを検討してください。

最初に、ユーザーは最初の選択リストから 1 を選択し、編集を押します。

ここに画像の説明を入力

$('#lstbx_new_repeat_requests').val()1 で、値 1 のアラートが表示されます。

その後、ユーザーは 2 番目の選択リストからオプション 2 を選択します。

ここに画像の説明を入力

は 1の$('#lstbx_new_repeat_requests').val()ままであるため、ユーザーが 2 番目の選択リストからオプションを選択した場合でも、値 1 のアラートが表示されます。が 1であり、最初の If ブロック内のコードが実行されるため、else if に到達できません$('#lstbx_new_repeat_requests').val()

以下に、上記の問題を解決する実装を示します。

<input type='button' id='btn_edit_details' value='edit' />
<select class="select-list" id='lstbx_new_repeat_requests' name='lstbx_new_repeat_requests'>
    <option value=''></option>
    <option value='1'>1</option>
</select>
<select class="select-list" id='lstbx_approved_repeat_requests' name='lstbx_approved_repeat_requests'>
    <option value=''></option>
    <option value='2'>2</option>
</select>
<select class="select-list" id='lstbx_declined_repeat_requests' name='lstbx_declined_repeat_requests'>
    <option value=''></option>
    <option value='3'>3</option>
</select>​

var request_id;    
$(document).ready(function() {
    $('#btn_edit_details').click(function() {
        alert(request_id);
    });

    $('.select-list').change(function() {
        if ($(this).val().length > 0) {
            request_id = $(this).val();
        }        
    });
});​
于 2012-08-29T19:51:55.643 に答える