jQuery if / else if语句在第一个“if”之后不起作用

时间:2012-08-29 19:18:26

标签: jquery

我有一个简单的jQuery if / else if condition但只有“if”部分有效,“else if”没有,我无法弄明白为什么。代码表示三个列表框( ajax-populated ),当它们中的任何一个单击时,jQuery函数会收集所单击项的ID并将其分配给变量。第一个(即使我切换位置,我得到正确的ID号)是好的,从来没有第二个或第三个。当我使用三个“if's”而不是“if / else 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>

3 个答案:

答案 0 :(得分:1)

尝试this

$('#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;
        }
    });
});

答案 1 :(得分:0)

实施逻辑存在问题。

考虑以下情况:

最初,用户从第一个选择列表中选择1并按下编辑。

enter image description here

$('#lstbx_new_repeat_requests').val()为1,您将看到值为1的提醒。

之后,用户从第二个选择列表中选择选项2.

enter image description here

$('#lstbx_new_repeat_requests').val()仍为1,因此,即使用户从第二个选择列表中选择了一个选项,您也会看到一个值为1的提醒。如果由于$('#lstbx_new_repeat_requests').val()无法达到,则为是1 第一个If块中的代码将被执行。

您可以在下面找到解决上述问题的实现方法。

<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();
        }        
    });
});​

答案 2 :(得分:0)

我最终得到了它对我有用的唯一方式,虽然它看起来可能不那么聪明,但是再一次 - 这是我能让它发挥作用的唯一方式......我不知道为什么它没有使用真正基本的if / else if方式。任何建议或意见将被热烈接受。非常感谢您为协助所做的努力。

三个列表框的类是lstbx_repeat_requests。当用户点击三者中的任何一个时,我在全局变量中捕获其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