Javascript 为什么jquery.val()函数没有设置实际值?
我使用此函数检查是否存在属性:Javascript 为什么jquery.val()函数没有设置实际值?,javascript,jquery,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, "")
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
函数无法检测到该值。显示问题(我希望第一个警报显示“输入有值”,第二个显示,但在Chrome中,至少第一个警报显示“输入需要值”)
如何使
.val(x)
按预期工作?(或者如何使hasAttribute
检测此类值)使用.val
就像执行el.value=…
。这与在元素上设置值属性不同。属性和属性是两个不同的实体。属性是与html元素内联定义的。。加载时,浏览器将读取每个属性并创建关联的属性
稍后对此元素的任何更新都将更新属性而不是属性
这个答案有详细的属性和属性
可能是下面这个样子,
if ($("input").prop("value")) {
alert("input has a value");
} else {
alert("input needs a value");
}
你现在真的不需要函数了。因为如果道具不存在,jQuery将返回undefined
正如Felix指出的,最好只做input.value
,如果没有的值,
hasAttributes
基本上只测试HTML源代码中是否存在这样的属性(或者说在“普通DOM节点中”).val
使用HTML…元素的value
属性,该元素是标准DOM接口的扩展。你必须区分HTML属性和DOM元素属性(实际上也叫做属性),这让我很困惑。1) DOM元素确实有方法,为什么不使用它呢?2) 如果您使用jQuery,为什么不使用$(el).is(“[”+attr+“])
?@VisioN在调用.val(x)
后仍然找不到“value”属性,因为jQuery只会设置DOM节点的“value”属性。@VisioN:legacy code…好的,如果我理解的话,我应该为如下内容更改hasAttribute:var hasAttribute=function(el,attr){return typeof$(el).prop(attr)!=“undefined”}@伊凡:取决于你想要什么。例如,el.值对于输入
元素始终存在。如果HTML中未设置值,则el.value
将返回空字符串。但它永远不会是未定义的。