将String作为参数传递到jQuery函数中

Passing String as parameter into jQuery function

本文关键字:jQuery 函数 参数传递 String      更新时间:2023-09-26

我遇到了一个奇怪的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(中?