我一直在尝试在我的网站上实现一个模式,它使用ajax调用动态加载内容。
我偶然发现了question,显示了这个demo,经过一点修改后,它可以完美地满足我的需求。
该演示在JSFiddle上完美运行,但在我的开发环境中正在吐出错误:
未捕获的TypeError:无法设置未定义的属性“innerHTML”
追溯到我的脚本是说htmlData是未定义的,但它是在它上面定义的吗?
运行呼叫的脚本:
<script>
(function() {
var infoModal = $('#myModal');
$('.modal-toggle').on('click', function(){
$.ajax({
type: "GET",
url: '/api/menu-item/'+$(this).data('id'),
dataType: 'json',
error: function(data){
fakeResponse = {"id":4,"menu_category_id":446,"name":"kunzereichert","description":"Dolores impedit ut doloribus et a et aut.","price":"999.99","created_at":"2015-04-10 05:55:23","updated_at":"2015-04-10 05:55:23"}
;
var htmlData = '<ul><li>';
htmlData += fakeResponse.name;
htmlData += '</li></ul>';
infoModal.find('#modal-body')[0].innerHTML = htmlData;
}
});
});
})(jQuery);
</script>
我对javascript不是很流利,所以我会很感激为什么我会收到这个错误。我只是试图测试从JSON响应加载一些信息然后显示在模态内。
如果有更好的方法,那么我愿意接受建议!
修改:这是我页面的HTML代码
@extends('sbadmin')
@section('content')
<div class="col-lg-10 col-lg-offset-1">
<h1><i class="fa fa-users"></i> Staff</h1>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Name</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach ($staff as $employee)
<tr>
<td>{{ $employee->first_name }} {{ $employee->last_name }}</td>
<td><button type="button" class="modal-toggle" data-toggle="modal" data-target="#myModal" data-id="{{ $employee->id }}">Disable</button><a href="{{ url('staff/regularhours/' . $employee->id) }}" class="btn btn-primary">Staff Details</a> <a href="{{ url('staff/regularhours/' . $employee->id) }}" class="btn btn-success">Regular Hours</a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
{!! $staff->render() !!}
</div>
<!-- Modal -->
<div id="myModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<p></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
(function() {
var infoModal = $('#myModal');
$('.modal-toggle').on('click', function(){
$.ajax({
type: "GET",
url: '/api/menu-item/'+$(this).data('id'),
dataType: 'json',
error: function(data){
fakeResponse = {"id":4,"menu_category_id":446,"name":"kunzereichert","description":"Dolores impedit ut doloribus et a et aut.","price":"999.99","created_at":"2015-04-10 05:55:23","updated_at":"2015-04-10 05:55:23"}
;
var htmlData = '<ul><li>';
htmlData += fakeResponse.name;
htmlData += '</li></ul>';
infoModal.find('#modal-body')[0].innerHTML = htmlData;
}
});
});
})(jQuery);
</script>
@endsection
答案 0 :(得分:3)
“未捕获的TypeError:无法设置属性'innerHTML'未定义”错误实际上指的是infoModal.find('#modal-body')[0]
部分,而不是htmlData
部分。
所以,您收到此错误是因为它说infoModal.find('#modal-body')[0]
不存在。在您使用代码的演示中,它有<div id="myModal"></div>
与您的var infoModal = $('#myModal');
在div中,是<div class="modal-body" id="modal-body"></div>
。这就是infoModal.find('#modal-body')[0]
试图找到的内容。所以,你的错误是说find()
正在寻找的元素不存在,你正试图设置它的innerHTML。
因此,请检查您的HTML并确保您从演示版或至少其<div class="modal-body" id="modal-body"></div>
部分复制了HTML。
修改强>
您的HTML显示您的元素为<div class="modal-body"></div>
,但您的来电为infoModal.find('#modal-body')[0]
,正在寻找modal-body
的ID。尝试将其更改为:
infoModal.find('.modal-body')[0].innerHTML
答案 1 :(得分:0)
您使用 modal-body 是类名,但您可以通过Id Name访问 您更改此代码
infoModal.find('#modal-body')[0].innerHTML = htmlData;
到
infoModal.find('.modal-body')[0].innerHTML = htmlData;
或者
$('.modal-body')html(htmlData);
这很好用
或添加ID名称为 modal-body