使用jQuery从下拉列表中获取所选文本

时间:2016-05-16 15:46:33

标签: javascript jquery

我有关于jquery的这个问题。 我正试图测试两条路径:

it("should return true when country is valid", function() {
    var validCountry = "Germany";
    $("#fld_country option:selected").val(validCountry);

    expect(isValid("#fld_country")).toBeTruthy();
});

it("should return false when country is invalid", function() {
    var invalidCountry = "";
    $("#fld_country option:selected").val(invalidCountry);

    expect(isValid("#fld_country")).toBeFalsy();
});

validCountryinvalidCountry是从下拉列表中选择的选项。

这是isValid函数:

function isValid(selector) {
    if (selector === "#fld_country option:selected") {
        return validator.isSelectedField(selector);
    }
    else return validator.isFieldEmpty(selector);
}

这是isSelectedField

isSelectedField: function (selector) {
        return $.trim($('selector option:selected').html())

问题是因为:

失败了
validate registration form should return true when country is valid

validate registration form should return false when country is invalid FAILED

我不知道问题是什么......有什么想法吗?

1 个答案:

答案 0 :(得分:1)

由于isValid值不匹配,您的validator.isFieldEmpty(selector)函数将始终返回selector - 您将#fld_country#fld_country option:selected进行比较。 也许这就是问题所在。

// EDIT

行。确保您正在设置正确的模板。你提到你使用jasmine-jquery灯具。在测试运行之前,您可以检查select是否有任何选项。

我相信你试图通过jquery设置选定的选项 - 这有一个bug,应该是:

$("#fld_country").val(validCountry);

如果你的<select>看起来像这样(那么请检查你的模板)

,这将有效
<select id="fld_country">
  <option value="Poland">Poland</option>
  <option value="Germany">Germany</option>
</select>

您遇到的另一个问题是isSelectedField功能。而不是

return $.trim($('selector option:selected').html())
你可能希望得到类似的东西:

return $.trim($(selector + ' option:selected').html())

因为你想使用selector变量而不是字符串。