#jquery
#jquery
Вопрос:
Я новичок в jQuery. Я пытаюсь вызвать функцию размытия в каждой строке четвертого столбца.Например.Я вызвал функцию размытия, используя идентификатор, т.е. «P4_1». Он должен иметь возможность вызывать тот же идентификатор, что и P4_2, P4_3 и так далее.
HTML:
<table id="myPassTbl">
<tr>
<th>Ink Name</th><th>Issued</th><th>Used</th><th>Return</th>
</tr>
<tr class="row1">
<td><input type="text" name="ink_name[]" id="P1_1" size="5" /></td>
<td><input type="text" name="colorno[]" id="P3_1" size="5"/></td>
<td><input type="text" name="screen[]" id="P4_1" size="5"/></td>
</tr>
<tr class="row2">
<td><input type="text" name="ink_name[]" id="P1_2" size="5"/></td>
<td><input type="text" name="colorno[]" id="P3_2" size="5"/></td>
<td><input type="text" name="screen[]" id="P4_2"size="5"/></td>
</tr>
<tr class="row3">
<td><input type="text" name="ink_name[]" id="P1_3" size="5"/></td>
<td><input type="text" name="colorno[]" id="P3_3" size="5"/></td>
<td><input type="text" name="screen[]" id="P4_3" size="5"/></td>
</tr>
jQuery:
$(function (){
$("#P4_1").blur(function(){
var $P3_1 = $("#P3_1");
var $P1_1 = $("#P1_1");
$.ajax({ //Passes value are sent to php and after to database.
method: "POST",
url: "xyz.php",
data:
{
"ink_qty":$P3_1.val(),
"ink_name":$P1_1.val()
}
})
.done(function( msg ) {
alert(msg);
});
});
});
xyz.php
$in_name=$_POST['ink_name'];
$qty1=$_POST['ink_qty'];
echo $in_name."/".$qty1;
Я могу переписать код, но это просто увеличит количество строк кода.Есть ли какой-либо другой вариант.Пожалуйста, предложите мне. Заранее спасибо.
Комментарии:
1. В вашем примере вам не нужно передавать
P2_1
?2. Нет. В этом нет необходимости.
3. Ну, зачем редактировать HTML-разметку? Это делает опубликованный ответ более не актуальным… Итак, в вашем реальном случае использования, сколько
td
у вас есть в строке?
Ответ №1:
Я бы отбросил все идентификаторы и использовал :nth-child()
и :eq()
, чтобы сделать это так:
(альтернативный подход ниже)
$(function() {
$('#myPassTbl td:nth-child(4) input').blur(function() {
var $row=$(this).closest('tr');
var ink_name= $row.find('td:eq(0) input').val();
var ink_qty= $row.find('td:eq(2) input').val();
var data={
"ink_qty": ink_name,
"ink_name": ink_qty
}
console.log(data);
$.ajax({ //Passes value are sent to php and after to database.
method: "POST",
url: "xyz.php",
data: data
})
.done(function(msg) {
alert(msg);
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="myPassTbl">
<tr>
<th>Ink Name</th>
<th>Issued</th>
<th>Used</th>
<th>Return</th>
</tr>
<tr class="row1">
<td>
<input type="text" name="ink_name[]" size="5" />
</td>
<td>
<input type="text" name="color[]" size="5" />
</td>
<td>
<input type="text" name="colorno[]" size="5" />
</td>
<td>
<input type="text" name="screen[]" size="5" />
</td>
</tr>
<tr class="row2">
<td>
<input type="text" name="ink_name[]" size="5" />
</td>
<td>
<input type="text" name="color[]" size="5" />
</td>
<td>
<input type="text" name="colorno[]" size="5" />
</td>
<td>
<input type="text" name="screen[]" size="5" />
</td>
</tr>
<tr class="row3">
<td>
<input type="text" name="ink_name[]" size="5" />
</td>
<td>
<input type="text" name="color[]" size="5" />
</td>
<td>
<input type="text" name="colorno[]" size="5" />
</td>
<td>
<input type="text" name="screen[]" size="5" />
</td>
</tr>
Альтернативный метод с использованием классов:
Поскольку вы изменили html, индексы в 1-м методе необходимо будет изменить, или вы могли бы просто использовать такие классы:
$(function() {
$('.send-on-blur').blur(function() {
var $row=$(this).closest('tr');
var ink_name= $row.find('.ink_name').val();
var ink_qty= $row.find('.ink_qty').val();
var data={
"ink_qty": ink_name,
"ink_name": ink_qty
}
console.log(data);
$.ajax({ //Passes value are sent to php and after to database.
method: "POST",
url: "xyz.php",
data: data
})
.done(function(msg) {
alert(msg);
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="myPassTbl">
<tr>
<th>Ink Name</th>
<th>Issued</th>
<th>Used</th>
<th>Return</th>
</tr>
<tr class="row1">
<td>
<input type="text" name="ink_name[]" class="ink_name" size="5" />
</td>
<td>
<input type="text" name="color[]" class="ink_qty" size="5" />
</td>
<td>
<input type="text" name="colorno[]" class="send-on-blur" size="5" />
</td>
</tr>
<tr class="row2">
<td>
<input type="text" name="ink_name[]" class="ink_name" size="5" />
</td>
<td>
<input type="text" name="color[]" class="ink_qty" size="5" />
</td>
<td>
<input type="text" name="colorno[]" class="send-on-blur" size="5" />
</td>
</tr>
<tr class="row3">
<td>
<input type="text" name="ink_name[]" class="ink_name" size="5" />
</td>
<td>
<input type="text" name="color[]" class="ink_qty" size="5" />
</td>
<td>
<input type="text" name="colorno[]" class="send-on-blur" size="5" />
</td>
</tr>
</table>
Ответ №2:
Вы можете реорганизовать свой код, чтобы настроить таргетинг на все входные данные 4-го столбца и получить соответствующие входные значения, используя:
Кстати, change
вместо этого используйте событие
$(function() {
$("#myPassTbl td:nth-child(4)").change(function() {
var ink_qty = $(this).closest('tr').find('input[name="colorno[]"]').val();
var ink_name = $(this).closest('tr').find('input[name="ink_name[]"]').val();
$.ajax({ //Passes value are sent to php and after to database.
method: "POST",
url: "xyz.php",
data: {
"ink_qty": ink_qty,
"ink_name": ink_name
}
})
.done(function(msg) {
alert(msg);
});
});
});
РЕДАКТИРОВАТЬ: после вашего редактирования вам понадобится :nth-child(3)
, но это до следующего редактирования… Теперь вы могли бы использовать td:last-child
but…