简体   繁体   English

jQuery一个事​​件处理程序,用于处理多个元素和事件

[英]Jquery one event handler for multiple elements and events

im trying to figure out how I can make this code in only one eventhandler... So it knows what element has been clicked and from there executes the right .text action on the correct element. 我试图弄清楚我如何只能在一个事件处理程序中编写此代码...因此它知道单击了哪个元素,然后从那里对正确的元素执行正确的.text操作。 Any ideas? 有任何想法吗? :) :)

$(document).ready(function(){
    $("#knapp1").on("click", function(){
        $("#hund").text("Voff!");
    });

        $("#knapp2").on("click", function(){
        $("#katt").text("Miau!");
    });

        $("#knapp3").on("click", function(){
        $("#gris").text("Nöff!");
    });
});

I don't know if I have catched the idea, do you mean something like this: 我不知道我是否了解这个主意,您的意思是这样的:

####HTML #### HTML
 <div id="group1"> <span id="knapp1" data-content="Voff!">hund</span> <br /> <span id="knapp2" data-content="Miau!">katt</span> <br /> <span id="knapp3" data-content="Nöff!">gris</span> </div> <div> <span id="hund"></span> <br /> <span id="katt"></span> <br /> <span id="gris"></span> </div> 
#####JAVASCRIPT ##### JAVASCRIPT
 $(document).ready(function(){ $("#group1 span").on('click', function() { selectorid=$(this).text(); texttoput=$(this).attr("data-content"); $("#"+selectorid).text(texttoput); }); }); 

See JsFiddle: https://jsfiddle.net/skfd8b84/ 参见JsFiddle: https ://jsfiddle.net/skfd8b84/

Just use a class, and add some inner logic. 只需使用一个类,并添加一些内部逻辑即可。 For example - using data-* attrs would be the cleanest: 例如,使用data-* attrs将是最干净的:

<button class="knapp" data-target="targetid" data-text="new text">click me!</button>

Here's a demo: 这是一个演示:

 $(document).ready(function(){ $(".knapp").on('click', function() { var $this = $(this), // so I only call $(this) once target = $this.data('target'), // grab target text = $this.data('text'); // grab text $(target).text(text); // finally, execute }); }); 
 * { font-family: sans-serif; } button { background: white; border: 1px solid #c1c1c1; border-radius: 3px; padding: 5px; } div { margin: 5px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button class="knapp" data-target="#hund" data-text="Voff!">Dog goes</button> <button class="knapp" data-target="#katt" data-text="Miau!">Cat goes</button> <button class="knapp" data-target="#gris" data-text="Nöff!">Gris(?) goes</button> <div> <span id="hund">hund</span> <br /> <span id="katt">katt</span> <br /> <span id="gris">gris</span> </div> 

With jQuery, you can combine selectors using commas. 使用jQuery,您可以使用逗号来组合选择器。 It could look like this: 它可能看起来像这样:

$(document).ready(function(){
  $("#knapp1, #knapp2, #knapp3").on("click", function(){
      //`this` now refers to the element that was clicked.
  });
});

Depending on your situation, this is probably better suited for a class to be on those elements instead. 根据您的情况,这可能更适合于将类放在这些元素上。

You could then use data attributes in HTML to handle the correct actions: 然后,您可以使用HTML中的数据属性来处理正确的操作:

<div id="knapp1" data-animal="hund" data-animal-sound="Voff"></div>

So that you can then set the correct values: 这样您就可以设置正确的值:

$(document).ready(function(){
  $("#knapp1, #knapp2, #knapp3").on("click", function(){
      var animal = $(this).data('animal');
      var sound = $(this).data('animal-sound');
      $("#"+animal).text(sound+"!");
  });
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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