
本文针对在使用 jQuery 获取父元素属性时遇到 undefined 的问题,提供了一个清晰的解决方案。通过分析常见错误原因,结合代码示例,详细解释了如何正确地使用 closest() 和 find() 方法来获取目标元素的属性值,避免 undefined 错误的发生。
在使用 jQuery 进行 DOM 操作时,经常需要获取特定元素的属性值。当尝试获取父元素的属性,尤其是通过 closest() 和 find() 方法时,可能会遇到 undefined 的情况。这通常是由于选择器使用不当造成的。
问题在于,jQuery 的选择器需要明确指定元素类型,例如类名、ID 或标签名。在原始代码中,closest('field') 和 find('field_info') 缺少了类名选择器所必需的 . 前缀。
正确的做法是在选择器中添加 . 前缀,明确指定要查找的是类名为 field 和 field_info 的元素。修改后的代码如下:
(function($){
$.dispatcherFiles = {
$filesDropzone: null,
$parallelUploads: 100,
$maxFiles: 10,
$files: [],
cacheDom: function(){
this.$body = $('body');
},
functions: {
uploadFiles: function (e) {
// Corrected lines: Added '.' prefix to class selectors
let field = $(e.currentTarget).closest('.field').find('.field_info');
let photoID = $(e.currentTarget).closest('.field').find('.field_info').attr('data-field_photo_id');
console.log(field);
console.log(photoID);
},
},
events: function(){
this.$body.on('click', '.field .field_form .btnUpload', this.functions.uploadFiles.bind(this));
},
init: function () {
this.cacheDom();
this.events();
}
};
$.dispatcherFiles.init();
})(jQuery);代码解释:
以下是一个完整的 HTML 示例,展示了如何使用修改后的 jQuery 代码来正确获取 data-field_photo_id 属性:
<!DOCTYPE html>
<html>
<head>
<title>jQuery Get Parent Attribute Example</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css" rel="stylesheet">
<style>
.field {
margin: 50px;
}
</style>
</head>
<body>
<div class="field">
<label>Photos</label>
<div class="field_info" data-field_photo_id="5">
<div class="value" data-item_id=""></div>
</div>
<div class="field_form">
<a class="btn btn-dark btn-md btnUpload" href="#">
<i class="fa fa-cloud-upload"></i> Upload
</a>
<div id="dz_params_field_photo_5" data-type="pipeline" data-entity_id="11" style="display: none"></div>
<div id="dz_field_photo_5_uploaded"></div>
</div>
</div>
<div class="field">
<label>Photos</label>
<div class="field_info" data-field_photo_id="6">
<div class="value" data-item_id=""></div>
</div>
<div class="field_form">
<a class="btn btn-dark btn-md btnUpload" href="#">
<i class="fa fa-cloud-upload"></i> Upload
</a>
<div id="dz_params_field_photo_6" data-type="pipeline" data-entity_id="12" style="display: none"></div>
<div id="dz_field_photo_6_uploaded"></div>
</div>
</div>
<div class="field">
<label>Photos</label>
<div class="field_info" data-field_photo_id="7">
<div class="value" data-item_id=""></div>
</div>
<div class="field_form">
<a class="btn btn-dark btn-md btnUpload" href="#">
<i class="fa fa-cloud-upload"></i> Upload
</a>
<div id="dz_params_field_photo_7" data-type="pipeline" data-entity_id="13" style="display: none"></div>
<div id="dz_field_photo_7_uploaded"></div>
</div>
</div>
<script>
(function($){
$.dispatcherFiles = {
$filesDropzone: null,
$parallelUploads: 100,
$maxFiles: 10,
$files: [],
cacheDom: function(){
this.$body = $('body');
},
functions: {
uploadFiles: function (e) {
let field = $(e.currentTarget).closest('.field').find('.field_info');
let photoID = $(e.currentTarget).closest('.field').find('.field_info').attr('data-field_photo_id');
console.log(field);
console.log(photoID);
},
},
events: function(){
this.$body.on('click', '.field .field_form .btnUpload', this.functions.uploadFiles.bind(this));
},
init: function () {
this.cacheDom();
this.events();
}
};
$.dispatcherFiles.init();
})(jQuery);
</script>
</body>
</html>当使用 jQuery 获取父元素属性时遇到 undefined,首先要检查选择器是否正确。确保在使用 closest() 和 find() 方法时,正确指定类名、ID 或标签名。通过添加 . 前缀来明确指定类名选择器,可以有效避免 undefined 错误的发生。
以上就是jQuery 获取父元素属性时 undefined 的问题解决的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号