我遇到了一个令人抓狂的问题,我将一个变量设置为指向一个 jQuery 选择器,例如:var foobar=jQuery(this);
然后我将此变量传递给一个要处理的函数。让我们稍微简化一下,说函数看起来像这样:
function SetFieldValue (selector) {
selector.val('test');
console.log ( selector );
console.log ( jQuery('#' + selector.attr('id')) );
}
在这种情况下,如果您假设:
- 选择器始终是一个表单元素(因此 val() 是一个有效的操作)
- 选择器确实解析为具有“id”属性的单个 dom 元素
然后,您会期望两个 console.log 语句输出相同的结果,对吗?好吧,我遇到了这种情况仅在大约 90% 的情况下发生的情况。
为了提供更多上下文,我创建了一个简短的截屏视频来演示该问题:
出于参考目的,以下是截屏视频中显示的实际 SetFieldValue 代码:
function SetFieldValue ( domObject, value ) {
// as a safety function, check if a string representation of the domObject was passed in and convert it to a jQuery object if it was
if ( jQuery.type(domObject) === "string") {
console.log ("Value passed into SetFieldValue was a string representation so converting to jQuery object");
domObject = jQuery(domObject);
}
if ( jQuery.inArray (domObject.prop('tagName').toLowerCase(),['input' , 'select' , 'textarea']) >= 0 ) {
console.log ("setting to value attribute: " + value);
if ( domObject.hasAttr('id') ) {
domObject.val(value);
//jQuery('#' + domObject.attr('id')).val(value);
} else {
domObject.attr('value',value);
}
console.log ("Using jQuery ID it is set to: " + jQuery('#' + domObject.attr('id')).val() );
console.log ("Using jQuery selector variable it is set to: " + domObject.val() );
} else {
console.log ("setting to html attribute");
domObject.html( value );
}
return domObject;
}