0

我有一个烦人的问题,我有一个 jQuery 选择 SELECT 选项列表的各种选项。我想设置 SELECTED=SELECTED 属性以强制将第一项以外的其他内容设为默认值。

看起来很基本,如果我设置 OPTION 标签的其他特征,它就可以正常工作。例如:

$(this).addClass ('TEST');

通过将 TEST 类添加到应该是默认选项的内容,可以按预期工作。我还可以执行以下操作:

$(this).attr('annoying', "SELECTED");

这会添加属性“烦人”,其值为“SELECTED”。遗憾的是,如果我执行以下操作:

$(this).attr('SELECTED', "SELECTED");

它只是完全忽略它。如果我进入 Chrome 的调试器并手动输入它,它确实有效,但不是来自我的 JS 文件。:^(

有任何想法吗?

更新到目前为止很好的建议,但由于没有任何效果,我怀疑还有其他问题。为了提供进一步的上下文......这是一个 Wordpress 网站,我正在让 QuickEdit 功能在分类的自定义属性中显示正确的 OPTION。对于那些不了解 Wordpress 的人来说,它可能并不重要(谁知道在这个阶段)。

这是完整的代码:

jQuery(document).ready(
function ($) {
    $('.editinline').on ('click', 
    function () {
        var $data_ref = $(this).closest('tr');
        $('.bespoke-item.quick-edit').each (
            function () {
                var col_name = $(this).attr('name');
                var col_value = $data_ref.find ('.' + col_name).text();
                $(this).val(col_value); // this will work for non-enumerated widgets
                if ( $(this).is( "select" ) ) {
                    selected = false; // used as a flag on whether the SELECTED value has been found
                    options = $(this).find ('.select-option');
                    options.each( 
                        function () {
                            if ( $(this).attr('value') == col_value ) {
                                $(this).addClass ('TEST');
                                selected = true;
                                $(this).attr('SELECTED', "SELECTED");
                                this.selected = 'SELECTED';
                            } 
                        }
                    );
                    if ( !selected ) {
                        // The value of the did not match any of the selections (this likely means it wasn't set at all)
                        // In this case revert to the "static-default" setting
                        options.each( 
                            function () {
                                if ( $(this).attr('static-default') ) {
                                    $(this).attr ('SELECTED' , 'SELECTED');
                                    alert ("Found value in static default " + $(this).val());
                                    selected = true;
                                } else {
                                    $(this).removeAttr ( 'SELECTED' );
                                }
                            }
                        );
                    }
                }

            }
        );
    }
);

});

4

1 回答 1

3

为您提供三个选项(都假设这this是有option问题的元素,因为它似乎在您的问题中):

  1. 如果您使用的是最新的 jQuery 副本,它可能是vs.attrprop东西(另请注意,它selected应该是小写字母,而不是大写字母):

    $(this).prop('selected', true);
    
  2. 有时直接使用 DOM 会更简单:

    this.selected = true;
    
  3. 或者,当然,valselect元素上使用,将其设置为您要选择的选项的值。

    $("selector for the select element").val($(this).val());
    // or better (as `value` is entirely reliable on option elements):
    $("selector for the select element").val(this.value);
    

三者的活生生的例子| 资源

于 2012-12-02T16:16:48.690 回答