无法设置未定义的属性'innerHTML'

时间:2016-02-06 06:29:48

标签: javascript jquery ajax laravel-5.1

我一直在尝试在我的网站上实现一个模式,它使用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">&times;</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

2 个答案:

答案 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