-1

我使用这个函数来检查属性的存在:

var hasAttribute = function(el, attr) {
    if ("hasAttribute" in el) {
        return el.attributes[attr] != null;
    }
    else if ("outerHTML" in el) {
        return (el.outerHTML
                   .replace(el.innerHTML, "")
                   .indexOf(" " + attr + "=") > -1);
    }
};

问题是当我使用 设置输入值时.val(x),如果我使用,我可以获得该值,.val()hasAttribute函数无法检测到它。这个 jsfiddle显示了问题(我希望第一个警报说“输入有一个值”,第二个显示它,但在 Chrome 中至少第一个警报说“输入需要一个值”)。

如何.val(x)按预期工作?(或如何hasAttribute检测这些值)

4

2 回答 2

5

属性和属性是 2 个不同的实体。属性是与 html 元素内联定义的。在加载时,浏览器会读取每个属性并创建关联的属性。

稍后对此元素的任何更新都将更新属性而不是属性。

这个https://stackoverflow.com/a/5876747/297641答案有详细的 attr vs prop。

可能像下面这样,

if ($("input").prop("value")) {
    alert("input has a value");
} else {
    alert("input needs a value");
}

你现在真的不需要这个功能。undefined因为如果道具不存在,jQuery 将返回。

正如 Felix 指出的那样,如果你只做input.valuewhich is falsy 如果它没有任何价值,那将是最好的""

于 2013-02-20T18:08:40.723 回答
2

使用.val就像做el.value = .... 它与value在元素上设置属性不同。

于 2013-02-20T18:07:52.780 回答