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

时间:2013-02-20 18:03:43

标签: 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);
    }
};

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

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

2 个答案:

答案 0 :(得分:5)

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

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

https://stackoverflow.com/a/5876747/297641答案详细说明了attr与道具。

可能是下面的内容,

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

现在你真的不需要这个功能了。如果支柱不存在,jQuery将返回undefined

正如菲利克斯指出的那样,如果input.value只是"",如果它没有{{1}}的任何值,那将是最好的。

答案 1 :(得分:2)

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