ReferenceError:无法找到变量:editMaterial

时间:2018-03-16 16:26:37

标签: jquery laravel

我尝试将一些函数移到文件中以获得更好的订单。如果功能位于laravel刀片内部,则效果很好。但是如果我将它移动到文件editOp.js中则会出现以下错误:ReferenceError:无法找到变量:editMaterial

通话功能:

        <td class="text-right">
        <a onclick="editMaterial('{{$opMaterial->id}}')" class="btn btn-link text-info" ><i class="fa fa-pencil " aria-hidden="true"> </i> </a>
        <a onclick="deleteMaterialItem('{{$opMaterial->id}}')" class="btn btn-link text-danger" ><i class="fa fa-times " aria-hidden="true"> </i> </a>
    </td>

包括js:

@endsection
@section('footer_scripts')
<script>
    var opId = '{{$op->id}}'
</script>
<script src="{{ asset('/assets/plugins/x-editable/dist/bootstrap3-editable/js/bootstrap-editable.js') }}" ></script>
<script src="/assets/plugins/bootstrap-select/dist/js/bootstrap-select.min.js"></script>
<script src="{{ asset('/js/opMaterial.js') }}"></script>
<script src="{{ asset('/js/editOp.js') }}" ></script>

editOp.js:

$(document).ready(function() {
function editMaterial(id) {
    $('#editMaterial-' + id).hide();
    $('#saveMaterial-' + id).show();
    $('#materialRow-' + id).hide();
    $('#materialFormRow-' + id).show();
    $("#materialFormRow-" + id + " input:text").first().focus();
}

function saveMaterial(id) {
    $('#editMaterial-' + id).show();
    $('#saveMaterial-' + id).hide();
    $('#materialRow-' + id).show();
    $('#materialFormRow-' + id).hide();
    saveMaterialFormRow(id);
}

function cancelMaterial(id) {
    $('#editMaterial-' + id).show();
    $('#saveMaterial-' + id).hide();
    $('#materialRow-' + id).show();
    $('#materialFormRow-' + id).hide();
}

})

不幸的是,谷歌没有帮助......

1 个答案:

答案 0 :(得分:0)

<a onclick="editMaterial('{{$opMaterial->id}}')" class="btn btn-link text-info" ><i class="fa fa-pencil " aria-hidden="true"> </i> </a>
<a onclick="deleteMaterialItem('{{$opMaterial->id}}')" class="btn btn-link text-danger" ><i class="fa fa-times " aria-hidden="true"> </i> </a>

onclick属性需要全局函数。但是您的函数是在$(document).ready(function() {函数中定义的,因此它们不是全局的。

解决方案:删除$(document).ready(function() {部分,让您的功能全局化。

替代方案,可能更好的解决方案:不要使用onclick并使用$('selector').click(function (){})将函数绑定到click事件。这可以(应该)在$(document).ready(function() {函数内完成。