The following code is guilty of generating this unusual problem:
<script type="text/javascript">
$(document).ready(function () {
$('.deleteRow').click(function (event) {
event.preventDefault();
if (confirm('Delete?')) {
var $t = $(this);
$.post($(this).attr('href'), function (data) {
if (data) {
$t.parent().parent().remove();
}
});
}
return false;
});
});
</script>
Thanks in advance!
Here's the HTML:
<td> <%= Html.ActionLink("<-Delete", "Delete", new {quoteID = quote.QuoteID}, new {@class= "deleteRow"}) %></td>
<td> <a class="deleteRow" href="/Quote/Delete/56"><-Delete</a></td>
There we are.
<tbody>
<tr>
<td>
<p>
asd</p>
<div firebugversion="1.5.4" id="_firebugConsole" style="display: none;">
&nbsp;</div>
<br />
</td>
<td>
2345
</td>
<td>
7/28/2010 3:26:10 PM
</td>
<td> <a class="deleteRow" href="/Quote/Delete/56"><-Delete</a></td>
<script type="text/javascript">
$(document).ready(function () {
$('.deleteRow').click(function (event) {
event.preventDefault();
event.stopPropagation();
if (confirm('Delete?')) {
var $t = $(this);
$.post($(this).attr('href'), function (data) {
if (data) {
$t.parent().parent().remove();
}
});
}
return false;
});
});
</script>
</tr>
<tr>
<td>
Now is the time for all good men to come to the aid of their parties.
</td>
<td>
</td>
<td>
7/6/2010 10:13:44 PM
</td>
<td> <a class="deleteRow" href="/Quote/Delete/2"><-Delete</a></td>
<script type="text/javascript">
$(document).ready(function () {
$('.deleteRow').click(function (event) {
event.preventDefault();
event.stopPropagation();
if (confirm('Delete?')) {
var $t = $(this);
$.post($(this).attr('href'), function (data) {
if (data) {
$t.parent().parent().remove();
}
});
}
return false;
});
});
</script>
</tr>
<tr>
<td>
I'm a loser
</td>
<td>
146
</td>
<td>
7/6/2010 9:11:42 PM
</td>
<td> <a class="deleteRow" href="/Quote/Delete/1"><-Delete</a></td>
<script type="text/javascript">
$(document).ready(function () {
$('.deleteRow').click(function (event) {
event.preventDefault();
event.stopPropagation();
if (confirm('Delete?')) {
var $t = $(this);
$.post($(this).attr('href'), function (data) {
if (data) {
$t.parent().parent().remove();
}
});
}
return false;
});
});
</script>
</tr>
</tbody>
Thanks for all the responses, btw.
Now that you've posted the generated HTML, it's plain to see that you've put the jQuery output inside the loop that generates your TD elements. It should go outside that loop, preferably at the bottom of the page!
If you look at the HTML, you'll see this 3 times:
<script type="text/javascript">
$(document).ready(function () {
$('.deleteRow').click(function (event) {
event.preventDefault();
event.stopPropagation();
if (confirm('Delete?')) {
var $t = $(this);
$.post($(this).attr('href'), function (data) {
if (data) {
$t.parent().parent().remove();
}
});
}
return false;
});
});
</script>
Now, you might say "yeah, it's defined three times, but shouldn't it still execute once? After all, I'm redeclaring the click handler!". Well, no. jQuery's .click() method binds a function to a particular event by adding that function to the list of eventListeners for that event. This is how event binding works in general in Javascript. Binding means add it to the list.
If you want to make sure the click handler you are adding is the ONLY click handler for a element, you'd have to use unbind first :
$('.deleteRow').unbind('click').click(function (event) { // rest of code...
instead of this:
$('.deleteRow').click(function (event) { // rest of code...
BINGO ~ you only need to call the event binder ONCE!
you are doing it three times.
bottom of the page should only have one script block
Also:
when you do this:
$t = $(this);
that query is now stored in $t so you can reuse it.
$.post($(this).attr('href'), function (data) {
can just use the stored result set
$.post($t.attr('href'), function (data) {
Good Luck.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With