繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM