JavaScript 选择器:如何找到下一个输入字段
JavaScript selectors: how to find the next input field
阅读选择器后,我尝试将一个函数应用到下一个输入字段...但它不起作用。要么我不明白所使用的选择器的概念,要么我对功能词“this”的概念有误。
<table class="example" id="example">
<tr> <!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
</table>
<script>
var searchTimeout;
$(".number").keyup(function() {
searchKey = this.value;
clearTimeout(searchTimeout);
searchTimeout = setTimeout(function() {
getdata(searchKey);
}, 200);
});
/* FIND A NAME MATCHING THE NUMBER */
function getdata(searchKey) {
$.ajax({
url: 'get_data.php',
type: 'GET',
dataType: 'json',
data: {number: searchKey},
success: function(data) {
if(data.status) {
$(this).closest("tr").next().find(".name").val(data.some_data);
} else {
$(this).closest("tr").next().find(".name").val("No match");
}
}
});
}
</script>
数据已正确获取,但我无法显示它,因为将它放在正确的字段中时出现问题。
在试验过程中,我尝试将选择器更改为:
$(input).closest.(".name").val(data.some_data);
并且有效 - 但它适用于动态添加到下方的所有行中的所有 class “名称”字段,并且当我尝试在第二个“数字”字段中输入数据时 - 没有任何反应(所以我猜$(".number").keyup(function() 也不正确).
处的选择器
请帮助我处理此代码,以便每一行都被视为单独的操作,并且数据显示在正确选择的字段中。谢谢!
当你调用你的函数时传递 this
以及它指的是事件发生的输入框。所以,在 settimeout 之外添加这一行 var selector = this
然后将它传递到这里 getdata(searchKey ,selector)
.最后将 $(this).clo..
更改为 $(el).closest..
与其他相同,并且不需要 next()
删除它。
演示代码 :
var searchTimeout;
$(document).on('keyup', '.number', function() {
searchKey = this.value;
var selector = this //add this line
clearTimeout(searchTimeout);
searchTimeout = setTimeout(function() {
getdata(searchKey, selector); //pass that as well
}, 200);
});
//add it here
function getdata(searchKey, el) {
/*$.ajax({
url: 'get_data.php',
type: 'GET',
dataType: 'json',
data: {
number: searchKey
},
success: function(data) {*/
//just for demo
var data = {
"status": "ok",
"some_data": "abcgh"
}
if (data.status) {
//remove next and use `el`
$(el).closest("tr").find(".name").val(data.some_data);
} else {
$(el).closest("tr").find(".name").val("No match");
}
/*}
});*/
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="example" id="example">
<tr>
<!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
<tr>
<!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
<tr>
<!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
</table>
阅读选择器后,我尝试将一个函数应用到下一个输入字段...但它不起作用。要么我不明白所使用的选择器的概念,要么我对功能词“this”的概念有误。
<table class="example" id="example">
<tr> <!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
</table>
<script>
var searchTimeout;
$(".number").keyup(function() {
searchKey = this.value;
clearTimeout(searchTimeout);
searchTimeout = setTimeout(function() {
getdata(searchKey);
}, 200);
});
/* FIND A NAME MATCHING THE NUMBER */
function getdata(searchKey) {
$.ajax({
url: 'get_data.php',
type: 'GET',
dataType: 'json',
data: {number: searchKey},
success: function(data) {
if(data.status) {
$(this).closest("tr").next().find(".name").val(data.some_data);
} else {
$(this).closest("tr").next().find(".name").val("No match");
}
}
});
}
</script>
数据已正确获取,但我无法显示它,因为将它放在正确的字段中时出现问题。
在试验过程中,我尝试将选择器更改为:
$(input).closest.(".name").val(data.some_data);
并且有效 - 但它适用于动态添加到下方的所有行中的所有 class “名称”字段,并且当我尝试在第二个“数字”字段中输入数据时 - 没有任何反应(所以我猜$(".number").keyup(function() 也不正确).
处的选择器请帮助我处理此代码,以便每一行都被视为单独的操作,并且数据显示在正确选择的字段中。谢谢!
当你调用你的函数时传递 this
以及它指的是事件发生的输入框。所以,在 settimeout 之外添加这一行 var selector = this
然后将它传递到这里 getdata(searchKey ,selector)
.最后将 $(this).clo..
更改为 $(el).closest..
与其他相同,并且不需要 next()
删除它。
演示代码 :
var searchTimeout;
$(document).on('keyup', '.number', function() {
searchKey = this.value;
var selector = this //add this line
clearTimeout(searchTimeout);
searchTimeout = setTimeout(function() {
getdata(searchKey, selector); //pass that as well
}, 200);
});
//add it here
function getdata(searchKey, el) {
/*$.ajax({
url: 'get_data.php',
type: 'GET',
dataType: 'json',
data: {
number: searchKey
},
success: function(data) {*/
//just for demo
var data = {
"status": "ok",
"some_data": "abcgh"
}
if (data.status) {
//remove next and use `el`
$(el).closest("tr").find(".name").val(data.some_data);
} else {
$(el).closest("tr").find(".name").val("No match");
}
/*}
});*/
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="example" id="example">
<tr>
<!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
<tr>
<!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
<tr>
<!-- rows are dynamically added -->
<td><input type="text" name="number" class="number"></td>
<td><input type="text" name="name" class="name"></td>
</tr>
</table>