0

我有一个简单的 jQuery if/else if 条件,但只有“if”部分有效,“else if”无效,我不知道为什么。该代码表示​​三个列表框(ajax-populated),当其中任何一个被点击时,jQuery 函数会收集被点击项目的 ID 并将其分配给一个变量。第一个(即使我换了地方,我也得到了正确的 ID 号)很好,第二个或第三个都没有。当我使用三个“if”而不是“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>
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 方式。任何建议或意见都将被热情接受。感谢大家的努力协助。

三个列表框的类是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
    
于 2012-08-30T17:06:52.553 回答
0

实现逻辑有问题。

考虑以下情况:

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

在此处输入图像描述

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

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

在此处输入图像描述

仍然是 1 ,$('#lstbx_new_repeat_requests').val()因此即使用户从第二个选择列表中选择了一个选项,您也会看到一个值为 1 的警报。else if 无法到达,因为$('#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();
        }        
    });
});​
于 2012-08-29T19:51:55.643 回答