6

我以前做过一百次,但在这一次我无法让它工作。

我有一个表格。您从客户端下拉列表中进行选择,它会更新表单中的其余字段。

简单。

我使用 ajax 调用并将表单数据作为 json 对象返回,然后使用以下 jquery 更新屏幕上的表单。设置字段以便name匹配输出定义(如下所示k)。

    $.each(out, function(k,v){
        if($('form input[name="'+k+'"]').attr('type') == 'text'){
            $('form input[name="'+k+'"]').val(v);
        }else if($('form input[name="'+k+'"]').attr('type') == 'hidden'){
            $('form input[name="'+k+'"]').val(v);
            $('form .'+k).text(v);
        }else if($('form input[name="'+k+'"]').attr('type') == 'checkbox'){
            if(v == '1') {
                $('form input[name="'+k+'"]').attr('checked', true);
            }else{
                $('form input[name="'+k+'"]').attr('checked', false);
            }
        }else
        $('form select[name="'+k+'"] option[value="'+v+'"]').attr('selected', true);

        $('form input[name="old_client_name"]').val(out.client_name);
    });

当我使用检查元素时,我实际上可以在一个选择字段中看到正确的选项已被赋予selected="selected"值,但用户的视图没有更新选择框以反映这一点,因此用户无法将其视为已选中,并且在处理表单时,它的行为就像尚未设置值一样。

我正在使用 jq 1.9.1,但最近才在这个特定项目上升级到这个。

有什么建议么?

4

4 回答 4

6

尝试:

    $('form select[name="'+k+'"] option[value="'+v+'"]').attr('selected', 'selected');

或者:

    $('form select[name="'+k+'"] option[value="'+v+'"]').prop('selected', 'selected');

为清楚起见,您应该始终设置 selected="selected",而不仅仅是 true。

于 2013-03-12T17:33:47.850 回答
4

如果您正在使用某些插件,请参阅特定文档。例子:

对于 select2,使用:

$('#myselect').trigger('change');

对于选择菜单,使用:

$('#myselect').selectmenu('refresh', true);
于 2018-04-14T03:55:25.800 回答
2

代替

.attr('selected', true);

为了

.prop('selected', true);

这是 jquery 1.6.x+ 中的新功能

于 2013-03-12T17:35:50.580 回答
1

为了完整起见,您也可以这样检查:

$('form input[name="'+k+'"]:selected').length == 1
于 2013-03-12T17:53:29.293 回答