为什么jquery .val()函数没有设置实际值?

Iva*_*van -1 javascript jquery

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

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);
    }
};
Run Code Online (Sandbox Code Playgroud)

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

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

Sel*_*gam 5

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

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

这个/sf/answers/411372321/答案有详细的attr vs prop.

可能是下面的东西,

if ($("input").prop("value")) {
    alert("input has a value");
} else {
    alert("input needs a value");
}
Run Code Online (Sandbox Code Playgroud)

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

正如菲利克斯指出的那样,如果你只是做了input.value假的,如果它没有任何价值,那将是最好的"".

  • @Ivan:取决于你想要什么.例如`el.value`总是存在于`input`元素.如果未在HTML中设置值,则"el.value"将返回空字符串.但它永远不会是"未定义". (2认同)