Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deny drag and drop to first-child cells of tabel

I want to deny the user to drop the blue fields into the first column.

I found a sample and redesigned it a bit to make clear what I want to do...

$(document).ready(function() {
  $('.event').on("dragstart", function(event) {
    var dt = event.originalEvent.dataTransfer;
    dt.setData('Text', $(this).attr('id'));
  });
  $('table td').on("dragenter dragover drop", function(event) {
    event.preventDefault();
    if (event.type === 'drop') {
      var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
      de = $('#' + data).detach();
      de.appendTo($(this));
    };
  });
})
table th,
table td {
  height: 30px;
  width: 200px;
}

table span {
  display: block;
  background-color: #09C;
  height: 30px;
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="#our_table" border="1" cellspacing=0>
  <tr>
    <th>Deny Drop on this column</th>
    <th>Used</th>
    <th>Available</th>
  </tr>
  <tr>
    <td>Firstname</td>
    <td></td>
    <td rowspan=5>
      <span class="event" id="a" draggable="true">Firstname</span>
      <span class="event" id="b" draggable="true">Lastname</span>
      <span class="event" id="c" draggable="true">Street</span>
      <span class="event" id="d" draggable="true">Age</span>
      <span class="event" id="e" draggable="true">Country</span>
      <span class="event" id="f" draggable="true">Nickname</span>
      <span class="event" id="g" draggable="true">Phone</span>
    </td>
  </tr>
  <tr>
    <td>Lastname</td>
    <td></td>
  </tr>
  <tr>
    <td>Street</td>
    <td></td>
  </tr>
  <tr>
    <td>Zipcode</td>
    <td></td>
  </tr>
  <tr>
    <td>City</td>
    <td></td>
  </tr>
</table>

May the code I use isnt the best so im open to some better solutions :)

I was wondering if its possible to deny the drag and drop functionality to first cell of table?

like image 454
Dwza Avatar asked Jan 01 '26 05:01

Dwza


2 Answers

Make this selector $('table tr td:not(:first-child)')

$(document).ready(function() {
  $('.event').on("dragstart", function(event) {
    var dt = event.originalEvent.dataTransfer;
    dt.setData('Text', $(this).attr('id'));
  });
  $('table tr td:not(:first-child)').on("dragenter dragover drop", function(event) {
    event.preventDefault();
    if (event.type === 'drop') {
      var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
      de = $('#' + data).detach();
      de.appendTo($(this));
    };
  });
})
table th,
table td {
  height: 30px;
  width: 200px;
}

table span {
  display: block;
  background-color: #09C;
  height: 30px;
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="#our_table" border="1" cellspacing=0>
  <tr>
    <th></th>
    <th>Used</th>
    <th>Available</th>
  </tr>
  <tr>
    <td>Firstname</td>
    <td></td>
    <td rowspan=5>
      <span class="event" id="a" draggable="true">Firstname</span>
      <span class="event" id="b" draggable="true">Lastname</span>
      <span class="event" id="c" draggable="true">Street</span>
      <span class="event" id="d" draggable="true">Age</span>
      <span class="event" id="e" draggable="true">Country</span>
      <span class="event" id="f" draggable="true">Nickname</span>
      <span class="event" id="g" draggable="true">Phone</span>
    </td>
  </tr>
  <tr>
    <td>Lastname</td>
    <td></td>
  </tr>
  <tr>
    <td>Street</td>
    <td></td>
  </tr>
  <tr>
    <td>Zipcode</td>
    <td></td>
  </tr>
  <tr>
    <td>City</td>
    <td></td>
  </tr>
</table>
like image 190
sglazkov Avatar answered Jan 03 '26 22:01

sglazkov


You could check if td is() first-child:

$(document).ready(function() {
  $('.event').on("dragstart", function(event) {
    var dt = event.originalEvent.dataTransfer;
    dt.setData('Text', $(this).attr('id'));
  });
  $('table td').on("dragenter dragover drop", function(event) {
    event.preventDefault();
    
    if (event.type === 'drop' && !$(this).is( "td:first-child" )) {
      var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
      de = $('#' + data).detach();
      de.appendTo($(this));
    };
  });
})
table th,
table td {
  height: 30px;
  width: 200px;
}

table span {
  display: block;
  background-color: #09C;
  height: 30px;
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="#our_table" border="1" cellspacing=0>
  <tr>
    <th></th>
    <th>Used</th>
    <th>Available</th>
  </tr>
  <tr>
    <td>Firstname</td>
    <td></td>
    <td rowspan=5>
      <span class="event" id="a" draggable="true">Firstname</span>
      <span class="event" id="b" draggable="true">Lastname</span>
      <span class="event" id="c" draggable="true">Street</span>
      <span class="event" id="d" draggable="true">Age</span>
      <span class="event" id="e" draggable="true">Country</span>
      <span class="event" id="f" draggable="true">Nickname</span>
      <span class="event" id="g" draggable="true">Phone</span>
    </td>
  </tr>
  <tr>
    <td>Lastname</td>
    <td></td>
  </tr>
  <tr>
    <td>Street</td>
    <td></td>
  </tr>
  <tr>
    <td>Zipcode</td>
    <td></td>
  </tr>
  <tr>
    <td>City</td>
    <td></td>
  </tr>
</table>
like image 33
jolmos Avatar answered Jan 04 '26 00:01

jolmos



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!