javascript - 输入变量可见,但在 Ajax 、 $each 和 Div 克隆过程之后不可访问
问题描述
我被带到城镇广场,因为我的示例代码中的错误而在我最后一次发布关于此的帖子时被扔石头......哈哈。这是由于强调这一点。最后我不得不删除它。感谢各位大佬的指点,帮助像我这样的新手学习。现在我从中吸取了教训,并在代码运行中呈现了这一切。
我的问题是 注册到期日期可见,但是当我单击测试日期输入按钮时,它显示为空。我创建了一个复制问题的代码运行/片段。
**Important.**
Please remember to disable the variable carDetailCloned.find('.mydate').val(person.registration);
using // before enabling the test variables.
card-container是在 div/card 被克隆之后。我将相同的 mydate 变量或相同变量的相同变体之一放在下面进行测试。
$('.card-container').append(carDetailCloned);
以下变化的结果:
Data visible but Blank Alert so no difference.
//carDetailCloned.find('.mydate').val(person.registration);
Data visible,data found as it Alerts the visible data!, But the same date shows on all fields.
//$('.card').find('.mydate').val(person.registration);
最终游戏 我需要在另一个脚本中使用该值,但我无法选择它。
$(document).ready(function(){
//simulates jason data result from Ajax
var data = [
{id:31,name:"Mike",surname:"Rynes",registration:1980},
{id:32,name:"James",surname:"Bond",registration:2000},
{id:33,name:"Helen",surname:"Wright",registration:1978},
];
$.each(data, function( i, person ) {
var carDetailCloned = $('.card').first().clone().show();
carDetailCloned.find('.id').text(person.id);
carDetailCloned.find('.name').text(person.name);
carDetailCloned.find('.surname').text(person.surname);
carDetailCloned.find('.mydate').val(person.registration);
$('.card-container').append(carDetailCloned);
//Remove Slashes below to test variations. One at a time please and make sure you disable the one above the card container first thanks.
//carDetailCloned.find('.mydate').val(person.registration);
//$('.card').find('.mydate').val(person.registration);
//$("#"+id).find('.mydate').val(person.registration);
});
});
$(document).ready(function(){
$(document).on('click', '.card .test-btn', function(event){
var mydate = $('.card').find('.mydate').val();
alert(mydate);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<div class="album py-1">
<div class="container bg-light">
<div class="row py-2">
<div class="col-md-3 card-container" >
<div class="card mb-3 shadow-sm" style="display:none;">
<div class="hover-container">
</div>
<div class="card-body CarDetail">
<p class="card-text font-weight-bold">ID:
<span class="id"></span>
</p>
<p class="card-text font-weight-bold">Name:
<span class="name"></span>
</p>
<p class="card-text font-weight-bold">Surname:
<span class=" surname"></span>
</p>
<div class="d-flex justify-content-between align-items-center">
<p class="font-weight-bold ">Registration:
<span class="font-weight-plain"></span>
<span class="registration"></span> <span>Expires:
<input type="text" class="mydate" name="" value=""> </span>
</p>
</div>
<p><button class="test-btn" >Test mydate input</button> </p>
</div>
</div>
</div>
</div>
</div>
</div>
解决方案
您可以使用.closest()
获取最近的卡片 div,然后单击按钮.find()
来查找您的输入并显示相同的内容。
演示代码:
$(document).ready(function() {
//simulates jason data result from Ajax
var data = [
{
id: 31,
name: "Mike",
surname: "Rynes",
registration: 1980
},
{
id: 32,
name: "James",
surname: "Bond",
registration: 2000
},
{
id: 33,
name: "Helen",
surname: "Wright",
registration: 1978
},
];
$.each(data, function(i, person) {
var carDetailCloned = $('.card').first().clone().show();
carDetailCloned.find('.id').text(person.id);
carDetailCloned.find('.name').text(person.name);
carDetailCloned.find('.surname').text(person.surname);
carDetailCloned.find('.mydate').val(person.registration);
$('.card-container').append(carDetailCloned);
});
});
$(document).ready(function() {
$(document).on('click', '.card .test-btn', function(event) {
//use closest and find
var mydate = $(this).closest('.card').find('.mydate').val();
alert(mydate);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<div class="album py-1">
<div class="container bg-light">
<div class="row py-2">
<div class="col-md-3 card-container">
<div class="card mb-3 shadow-sm" style="display:none;">
<div class="hover-container">
</div>
<div class="card-body CarDetail">
<p class="card-text font-weight-bold">ID:
<span class="id"></span>
</p>
<p class="card-text font-weight-bold">Name:
<span class="name"></span>
</p>
<p class="card-text font-weight-bold">Surname:
<span class=" surname"></span>
</p>
<div class="d-flex justify-content-between align-items-center">
<p class="font-weight-bold ">Registration:
<span class="font-weight-plain"></span>
<span class="registration"></span> <span>Expires:
<input type="text" class="mydate" name="" value=""> </span>
</p>
</div>
<p><button class="test-btn">Test mydate input</button> </p>
</div>
</div>
</div>
</div>
</div>
</div>
推荐阅读
- php - 我可以在父构造函数中将对象动态转换为特定的子类吗?
- twig - ModuleNode 是否始终是 Twig 节点层次结构中的顶级节点?
- python - autopytoexe 和 Google 表格 UnknownApiNameOrVersion:名称:表格版本:v4
- c# - 高效查询多张表c#linq
- flutter - 如果存在 Dart 从字符串中删除第一个逗号
- acumatica - 从一个自定义字段到另一个自定义字段的 Acumatica 数据
- org-mode - 如何通过(ox-)hugo并排导出文本以在组织模式之外进行比较
- linux - 如何更改第二个 SSD 上新分区的路径?
- node.js - 获取 NodeJS 模块范围
- python - Python2:安装networkx