我遇到了一个奇怪的jQuery问题。我正在编写一个接受字符串作为参数的函数,然后将该字符串提供给jQuery选择器。
这是功能:
function myFunction(specialfields) {
if(!$(specialfields).is(':focus')) {
alert('thats not in focus');
}
}
但是,我一直收到这个错误:
Uncaught Syntax error, unrecognized expression: focus
但奇怪的是,'。(':focus')'在其他区域工作,不接受参数时,如果我通过了这个:
$(specialfields)
它确实读作有效对象。我试图传递这样的字符串:
#id1, #id2
此外,这有效:
$(specialfields).val()
任何人都知道最新情况会怎样?
答案 0 :(得分:1)
好吧,我认为问题在于我将两个参数传递到“特殊字段”,这打破了':焦点'选择器,显然你不能同时拥有两个焦点。
可以通过在函数中传递一个选择器来修复它。
答案 1 :(得分:1)
你的方式一直都很有效,而且比我的浪费时间更快。
我对函数的定义略有不同,我通过将响应传递给alert()
来替换<p id="response">
功能。
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/。
您会注意到我使用:focus
评估if ($(specialfields + ':focus').length === 0)
的传入参数。
从好的方面来说,这个方法确实处理了多个选择器参数(例如#id1, #id2')
;请参阅http://jsfiddle.net/jhfrench/UufWD/19/)。但是您对if(!$(specialfields).is(':focus'))
的原始评价更好。
现在请参阅http://jsfiddle.net/jhfrench/UufWD/14/了解您的方法的实例。
答案 2 :(得分:0)
I think .focus() should be enough, as :focus is not a selector.
没有本机解决方案,但是有一种更优雅的方式可以做到:
jQuery.extend(jQuery.expr[':'], {
focus: "a == document.activeElement"
});
您正在定义一个新的选择器。请参阅插件/编写。然后你可以这样做:
if ($("...").is(":focus")) {
...
}