5

我遇到了一个有趣的小问题,可能只是我很傻。

我有一个看起来有点像这样的选择框:

<select id="dom_" name="dom_">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    ...

这些选项代表一个月中的几天,最多 31 天。

现在,我试图在加载包含信息的表单(用于编辑)时选择一个默认值,但我无法让它正常工作。

我尝试使用我在之前的一些 SO 问题中找到的这个片段:

$("#dom_ option[value$='" + 2 + "']").attr('selected', true);

该行运行并将第二个选项设置为选中,但它也将其他 2X 或 X2 选项设置为选中。例如,12 和 22 也将设置为选中。

但是,如果我使用这个:

$("#dom_ option").each(function()
{
    if ($(this).val() == 2)
    {
        $(this).attr('selected', true);
    }
    else
    {
        $(this).attr('selected', false);
    }

});

然后将选择正确的选项,但SELECT不会更新该框。

我必须手动调用$("#dom_").val(2);后记来更新盒子。

所以,我的问题是,为什么第一个选项不起作用,为什么第二个不能自动刷新?

SELECT另外,通过一个对象$("#dom_")并调用.val它与选择一个选项并将其设置selected为 true之间到底有什么区别?这两个都发回相同的POST还是GET数据?

这是一个jsFiddle,希望能证明这一点。

如果有帮助,我使用的是 JQuery 1.6.4,但我可以在 jsFiddle 的一些较新版本上重现相同的问题。

如果这个问题太简单,我很抱歉。当谈到 JavaScript 和 JQuery 时,我仍然是个业余爱好者。

4

3 回答 3

6

您正在使用带有 ( ) 的结尾$=,而不是仅使用value=which 只会与您想要的值完全匹配。

$("#dom_ option[value='" + 2 + "']").attr('selected', true);
于 2013-02-25T20:27:19.300 回答
1

这听起来像是一个足够简单的设计,您不需要在 javascript 中执行此操作(即,如果它是静态内容并且您只需要一个简单的默认值)。您知道您可以将“选定”属性应用于您的 html 选项标签吗?

<select id="dom_" name="dom_">
    <option value="1">1</option>
    <option value="2" selected="selected">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    ...
于 2013-02-25T20:30:14.117 回答
1

两者现在都应该工作

1) 根据 Jquery Ends With Selector( [name$="value"] ) 将选择具有指定属性且值恰好以给定字符串结尾的元素。

  $("#dom_ option[value='" + 2 + "']").attr('selected', true);

2)在第二个例子中,else大小写是不必要的,因为它会重置selected选项

$("#dom option").each(function()
{
    if ($(this).val() == 2)
    {
        $(this).attr('selected', true);
    }
});

检查这个 Jsfiddle http://jsfiddle.net/NUTWR/

于 2013-02-25T20:33:45.007 回答