【问题标题】:Laravel 5.7 cannot change input class using ajaxLaravel 5.7 无法使用 ajax 更改输入类
【发布时间】:2020-11-03 21:30:59
【问题描述】:

我希望用户在输入发票号码并按 Enter 系统检查数据库中是否此输入值已存在或未使用 ajax 并且如果该值存在则必须更改输入类

这是我的刀片代码:

 <div class="form-group">
                                <label class="col-form-label" for="inputWarning"><i class="far fa-bell"></i> Input with
                                    warning</label>
                                <input type="text" class="form-control is-warning" id="invoice_number" name="invoice_number" placeholder="Enter ...">
                            </div>

这是我的 Ajax 代码:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
    $("#invoice_number").keyup(function (e) {
        if (e.keyCode == 13) {
            var inv_no = $(this).val();
            $.ajax({
                type: "GET",
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                url: "{{url('checkInvoice')}}",
                data: {// change data to this object
                    _token : $('meta[name="csrf-token"]').attr('content'),
                    invoice_number:inv_no
                },
                dataType: "json",
                success: function(res) {
                    if(res.exists){
                        alert('true');
                        $(this).removeClass('form-control is-warning').addClass('form-control is-valid');
                    }else{
                        alert('false');
                        $(this).removeClass('form-control is-warning').addClass('form-control is-invalid');

                    }
                },
                error: function (jqXHR, exception) {

                }
            });
        }

    });
</script>

【问题讨论】:

  • 代码失败的具体原因是什么?浏览器的调试控制台有错误吗? (你知道如何找到浏览器的调试工具吗?)在调试工具网络选项卡中,是否发出了 AJAX 请求?服务器的响应是什么?
  • 不,没有错误,也没有发生任何事情输入外观不会改变只有警报动作触发

标签: ajax laravel


【解决方案1】:

success 回调(或任何回调)中,this 并不代表您认为的意思。回调发生在稍后的时间和更晚的上下文中,因此它不再引用触发事件的元素。

在发出 AJAX 请求之前将对该元素的引用捕获到变量中:

let self = this;
$.ajax({
  //...
});

然后在success 回调中使用该变量而不是this

$(self).removeClass('form-control is-warning').addClass('form-control is-valid');

【讨论】:

  • 我怎么能感谢你现在它正在工作,我知道如何使用'this'非常感谢大卫先生
猜你喜欢
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 2019-05-28
  • 1970-01-01
  • 2018-09-12
  • 2019-05-21
相关资源
最近更新 更多