javascript - How can I get outer div target with event.target? - Stack Overflow

I'm making web service with javascript (and jQuery), and I'm trying to make custom menu.But

I'm making web service with javascript (and jQuery), and I'm trying to make custom menu.
But the main point is "Widget's ID which is clicked by user".
I want to return widget's id (like widget1 or widget2),
even if user pressed inner objects (img, textarea, etc.)
I tried event.target.id but it returns inner object's id, not outer div.
How could I solve this problem?

JavaScript and HTML :

$("#wrapper_widgets").bind("contextmenu", function(event) {
  event.preventDefault();
  alert(event.target.id);
});
<div id="wrapper_widgets">
  <div id="widget1">
    <img src="blablabla.png">
    <textarea id="widget1_textarea">blablabla</textarea>
  </div>
  <div id="widget2" style="border: 1px solid blue; width: 500px; height: 100px;">
    <p id="widget2_timedoc">asdasdasd</p>
  </div>
</div>

I'm making web service with javascript (and jQuery), and I'm trying to make custom menu.
But the main point is "Widget's ID which is clicked by user".
I want to return widget's id (like widget1 or widget2),
even if user pressed inner objects (img, textarea, etc.)
I tried event.target.id but it returns inner object's id, not outer div.
How could I solve this problem?

JavaScript and HTML :

$("#wrapper_widgets").bind("contextmenu", function(event) {
  event.preventDefault();
  alert(event.target.id);
});
<div id="wrapper_widgets">
  <div id="widget1">
    <img src="blablabla.png">
    <textarea id="widget1_textarea">blablabla</textarea>
  </div>
  <div id="widget2" style="border: 1px solid blue; width: 500px; height: 100px;">
    <p id="widget2_timedoc">asdasdasd</p>
  </div>
</div>

Share Improve this question edited Jun 9, 2015 at 5:20 captainsac 2,4903 gold badges29 silver badges51 bronze badges asked Jun 9, 2015 at 5:05 MineSkyMineSky 971 silver badge11 bronze badges 1
  • add event.stopPropagation(), before event.preventDefault() – Walter Chapilliquen - wZVanG Commented Jun 9, 2015 at 5:08
Add a ment  | 

3 Answers 3

Reset to default 5

The problem is event.target will refer to the element from which the event was originated from, so you will have to find the closest ancestor widget element

One easy solution is to use a class to all the widgets and target it

<div id="wrapper_widgets">
    <div id="widget1" class="widget">
        <img src="blablabla.png">
        <textarea id="widget1_textarea">blablabla</textarea>
    </div>
    <div id="widget2" class="widget" style="border: 1px solid blue; width: 500px; height: 100px;">
        <p id="widget2_timedoc">asdasdasd</p>
    </div>
</div>

then

$("#wrapper_widgets").on("contextmenu", '.widget', function (event) {
    event.preventDefault();
    alert(this.id);
});

or

$("#wrapper_widgets").bind("contextmenu", function(event) {
    event.preventDefault();
    alert($(event.target).closest('.widget').attr('id'));
 });

You can use .closest('div') with .prop() to get the immediate ancestor ID.

$(event.target).closest('div').prop('id')

Note : This would work only if there is no further nesting of <div>s inside wrappers.

$("#wrapper_widgets").bind("contextmenu", function (event) {
    event.preventDefault();
    alert($(event.target).closest('div').prop('id'));
});

$("#wrapper_widgets").bind("contextmenu", function (event) {
    event.preventDefault();
    alert($(event.target).closest('div').prop('id'));
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper_widgets">
    <div id="widget1">
        <img src="blablabla.png">
        <textarea id="widget1_textarea">blablabla</textarea>
    </div>
    <div id="widget2" style="border: 1px solid blue; width: 500px; height: 100px;">
        <p id="widget2_timedoc">asdasdasd</p>
    </div>
</div>

In the event function use

$(this).parent().prop('id')

to get the immediate parent's id of the clicked element. This will always return the immediate parent and not necessarily only divs but in your case it will work and return 'widget1' or 'widget2'.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744364595a4570638.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信