将String作为参数传递给jQuery函数

时间:2013-01-17 19:15:59

标签: javascript jquery jquery-selectors parameters

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

任何人都知道最新情况会怎样?

3 个答案:

答案 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)的传入参数。

我认为这会更快,但是that is not the case

从好的方面来说,这个方法确实处理了多个选择器参数(例如#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")) {
  ...
}

Source-- Is there a 'has focus' in JavaScript (or jQuery)?