在jQuery.load()之后重新应用事件绑定

时间:2013-03-21 12:03:53

标签: jquery

不幸的是我无法创建一个jsFiddle,因为这需要一个返回HTML的有效URL,但关键是我正在使用输入掩码,它在执行$.load()后停止工作 我认为我只是不太了解这个功能。

脚本:

(function () {
    isa.uk.HpiLookup = (function () {
        function HpiLookup() { }
        HpiLookup.prototype.setupEventHandlers = function () {
            return $('#hpiLookupContainer').on("click", "#vehicleRegistrationSearchButton", this.onVehicleRegistrationSearchButton);
        };

        HpiLookup.prototype.setupInputMasks = function () {
            $('#VehicleRegistrationNumber').inputmask("#######", { "placeholder": "" });
        };

        HpiLookup.prototype.onVehicleRegistrationSearchButton = function (event) {
            event.preventDefault();
            return $('#hpiLookupContainer').load(
                GetVehicleByRegistrationNumberUrl,
                {
                    VehicleRegistrationNumber: $('#VehicleRegistrationNumber').val()
                },
                this.setupInputMasks);
        };

        return HpiLookup;

    })();
}).call(this);

Index.cshtml:

<div id="hpiLookupContainer">
    <input id="VehicleRegistrationNumber" type="text">
    <button id="vehicleRegistrationSearchButton" type="button">Search</button>
</div>

<script type="text/javascript">
    var GetVehicleByRegistrationNumberUrl = '@Url.Action("GetVehicleByRegistrationNumber", "Vehicle")';
    var hpiLookup = new isa.uk.HpiLookup();
    hpiLookup.setupEventHandlers();
    hpiLookup.setupInputMasks();
</script>

我试图以这种方式使$ .load()回调setupInputMasks,但事实并非如此。 如何在jQuery.load()之后重新应用事件绑定?

2 个答案:

答案 0 :(得分:0)

当你在当前函数中调用this.setupInputMasks);时它是this而不是一个类。 Yuo应该放置一些其他变量,即:self并将this放入。{/ p>

您的代码中的Explonation:

//...
HpiLookup.prototype.onVehicleRegistrationSearchButton = function (event) {
        event.preventDefault();
        var self = this; // Now You put this (from a class) into another variable
        return $('#hpiLookupContainer').load(
            GetVehicleByRegistrationNumberUrl,
            {
                VehicleRegistrationNumber: $('#VehicleRegistrationNumber').val()
            },
            function(){self.setupInputMasks}); // now You call class this
    };
// ...

它帮助你。您还可以使用jQuery解决方案,函数代理。

更多信息来自:http://api.jquery.com/jQuery.proxy/

答案 1 :(得分:0)

这是解决方案:

return $('#hpiLookupContainer').load(
    GetVehicleByRegistrationNumberUrl,
    {
        VehicleRegistrationNumber: $('#VehicleRegistrationNumber').val()
    },
    hpiLookup.setupInputMasks
);