使选择器在jQuery中表现得像另一个

时间:2016-12-16 02:46:45

标签: javascript jquery

我有一个id="original"元素的选择器,它在点击一个名为on_click_behaviour的函数时触发,我需要另一个选择器id="other"来模仿/继承它的所有行为或只是点击。

如何让other选择器继承original中的所有功能,这样当我点击other选择器时,它也会触发on_click_behaviour?< / p>

// can not touch this code as it's core
$( "#original" ).click(function() {
  on_click_behaviour();
});
<div id="original">close window</div>

<div id="other">close same window</div>

我正在寻找类似的东西:

$( "#other" ).inherit_behaviours_from( "#original" );

3 个答案:

答案 0 :(得分:3)

你的条款非常糟糕。

  • 选择器是字符串,匹配页面上的0个或更多元素
  • 选择器无法触发事件
  • 继承不适用于此
  • 您无法点击选择器

您正在做的是使用选择器来查找元素,然后将函数绑定到与该元素交互将触发的某个事件。

尝试做的事情是将相同的行为绑定到第二个元素。

为了将相同的处理程序添加到其他元素,您只需要选择除第一个元素之外的第二个元素。您可以通过将两个选择器添加到一起来实现,用逗号分隔:

$('#original, #other').click(function () {
  behavior();
})

这将选择带有id="original"的元素和带有id="other"的元素,然后将相同的click处理函数绑定到它们。

答案 1 :(得分:3)

如果您只需要使用单击&#34;原始&#34;时发生的功能。元素,它不涉及&#34;原始&#34;之间的任何变量。和#34;其他&#34;,您可以使用此解决方案。 它看起来不是很好,但它确实有效。

&#13;
&#13;
$( "#other" ).click(function() {
  $("#original").click();
});
&#13;
&#13;
&#13;

答案 2 :(得分:2)

您可以使用.trigger()来发送附加到click的{​​{1}}事件,该事件调用分配给处理程序#original事件的处理程序。

click
function on_click_behaviour() {
  console.log("clicked")
} 

// can not touch this code
$("#original").click(function() {
  on_click_behaviour();
});

$("#other").click(function() {
  $("#original").trigger("click");
});

您也可以使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="original">close window</div> <div id="other">close same window</div>将事件处理程序附加到#original" DOM元素,然后将分配给$._data()的处理程序附加到#original

#other
function on_click_behaviour() {
  console.log("clicked")
} 

// can not touch this code
$("#original").click(function() {
  on_click_behaviour();
});

var originalHandler = $._data($("#original")[0]).events.click[0].handler;

$("#other").on("click", originalHandler);