[英]Passing String as parameter into jQuery function
我有一个奇怪的jQuery问题。 我正在编写一个接受字符串作为参数的函数,然后将该字符串输入jQuery选择器。
这是函数:
function myFunction(specialfields) {
if(!$(specialfields).is(':focus')) {
alert('thats not in focus');
}
}
但是,我不断收到此错误:
Uncaught Syntax error, unrecognized expression: focus
但是,奇怪的是,'。is(':focus')'在不接受参数的情况下也可以在其他区域工作,如果我通过了这一点:
$(specialfields)
它确实读取为有效对象。 我正在尝试传递这样的字符串:
#id1, #id2
此外,这还可以:
$(specialfields).val()
有人知道这里发生了什么吗?
好的,我认为问题在于我将两个参数传递给“ specialfields”,这打破了':focus'选择器,因为显然您不能同时聚焦两个字段。
可以通过仅在函数中传递单个选择器来解决此问题。
与我的浪费时间相比,您的方法一直有效,并且工作速度更快。
我对函数的定义有所不同,并且通过将响应传递给<p id="response">
来替换了alert()
功能。
HTML:
<input type="text" name="id1" id="id1" />
<br />
<input type="text" name="id2" id="id2" />
<br />
<p id="response">response</p>
JavaScript:
var myFunction = function (specialfields) {
if ($(specialfields + ':focus').length === 0) {
$('#response').text(specialfields + ' is not in focus');
} else {
$('#response').text(specialfields + ' is in focus');
}
};
有关工作示例,请参见http://jsfiddle.net/jhfrench/UufWD/ 。
您会注意到我使用if ($(specialfields + ':focus').length === 0)
评估:focus
的传入参数。
从正面来看,此方法确实处理多个选择器参数(例如#id1, #id2')
; 参见http://jsfiddle.net/jhfrench/UufWD/19/ )。 但是您对if(!$(specialfields).is(':focus'))
的原始评估会更好。
现在,请参阅http://jsfiddle.net/jhfrench/UufWD/14/,获取有关您的方法的有效示例。
I think .focus() should be enough, as :focus is not a selector.
没有本机解决方案,但是是的,您可以采用一种更优雅的方法:
jQuery.extend(jQuery.expr[':'], {
focus: "a == document.activeElement"
});
您正在定义一个新的选择器。 请参阅插件/创作。 然后,您可以执行以下操作:
if ($("...").is(":focus")) {
...
}
来源-JavaScript (或jQuery)是否有“具有重点”?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.