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

Why jquery .val() function is not setting a real value?

本文关键字:设置 函数 jquery val 为什么      更新时间:2023-09-26

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

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显示了问题(我希望第一个警报说"input有值",第二个警报显示它,但在Chrome中,至少第一个警报是"input需要值")。

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

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

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

这个https://stackoverflow.com/a/5876747/297641答案有详细的属性和道具。

可能是下面的内容,

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

你现在真的不需要函数。因为如果道具不存在,jQuery将返回undefined

正如Felix所指出的,最好只做input.value,如果它没有""的任何值,这是错误的。

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