0

我有一个奇怪的 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()

有人知道这里发生了什么吗?

4

3 回答 3

1

好的,我认为问题在于我将两个参数传递给“特殊字段”,这破坏了“:焦点”选择器,因为显然您不能同时拥有两个焦点字段。

可以通过在函数中仅传递一个选择器来修复它。

于 2013-01-17T19:39:11.140 回答
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/ 。

您会注意到我评估了传入的参数:focuswith if ($(specialfields + ':focus').length === 0)

我认为这会更快,但事实并非如此

从好的方面来说,此方法确实可以处理多个选择器参数(例如,#id1, #id2')参见http://jsfiddle.net/jhfrench/UufWD/19/)。但是你原来的评价if(!$(specialfields).is(':focus'))更好。


现在请参阅http://jsfiddle.net/jhfrench/UufWD/14/以获得您的方法的工作示例。

于 2013-01-17T19:52:52.173 回答
0
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)中是否有“焦点”?

于 2013-01-17T19:26:13.637 回答