jQuery:将可点击事件分配给具有相似ID的多个div

Mis*_*a M 3 html javascript jquery

我正在一个显示多个条目的网站上工作.每个条目都可以展开/折叠,显示更多/更少的信息.每个条目的HTML如下所示:

<div id="entry-1"><div>some text</div><div><img></div></div>
<div id="entry-2"><div>some text</div><div><img></div></div>
<div id="entry-3"><div>some text</div><div><img></div></div>
Run Code Online (Sandbox Code Playgroud)

"entry-{1,2,3}"中的1,2,3是每个帖子的id.如何将click事件绑定到每个div?

我试过做:

$('div[id^="entry-"]').click( myFunc($(this)) ) ;
Run Code Online (Sandbox Code Playgroud)

但是当我点击时,没有任何反应,即使页面加载时,点击也不会触发,执行JavaScript.

Jas*_*ett 6

试着转动你的

$('div[id^="entry-"]').click( myFunc($(this)) ) ;
Run Code Online (Sandbox Code Playgroud)

$('div[id^="entry-"]').click( function(){ myFunc($(this)); } ) ;
Run Code Online (Sandbox Code Playgroud)


Šim*_*das 6

问题是this关键字.在这段代码中......

$('div[id^="entry-"]').click( myFunc($(this)) );
Run Code Online (Sandbox Code Playgroud)

...该this值不指向已单击的DOM元素,而是指向全局对象(窗口).

这可行:

$('div[id^="entry-"]').click(function() {
     myFunc($(this));
});
Run Code Online (Sandbox Code Playgroud)

正如@JCOC指出的那样,你正在调用这个函数.
在原始代码中,myFunc($(this))将立即调用,并将其返回值传递给click()方法.

因此,如果您的函数返回undefined,例如,结果代码将是这样的:

$('div[id^="entry-"]').click(undefined);
Run Code Online (Sandbox Code Playgroud)

......显然不起作用.


JCO*_*611 5

我在这里看到的问题是你正在执行这个功能.你可以这样做:

$('div[id^="entry-"]').click( myFunc ) ;

function myFunc(){
   var some = $(this);
   ...
}
Run Code Online (Sandbox Code Playgroud)

另外,我之前建议你使用类:

<div id="entry-1" class="entry"></div>
<div id="entry-2" class="entry"></div>
//JS Selector:
$("div.entry")
Run Code Online (Sandbox Code Playgroud)

总而言之:

$('div.entry').click( myFunc );
Run Code Online (Sandbox Code Playgroud)