2013-03-21 28 views
1

不幸的是,我不能创建一个jsFiddle,因为这需要一个有效的URL返回HTML,但重点是我使用输入掩码,在执行$.load() 我认为这只是我没有很好地理解这个功能。在jQuery.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()之后重新应用事件绑定?

+0

继'this'是给我的大脑应变命运。 – 2013-03-21 12:21:46

回答

0

这里的解决方案:

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

当您拨打this.setupInputMasks);它是this当前函数不是类。宥应该把一些其他的变量,即:self,把this

的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 
    }; 
// ... 

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

更是在这里:http://api.jquery.com/jQuery.proxy/

+0

谢谢。它似乎没有加载由于回调函数而从服务器返回的HTML。如果我将'self.setupInputMasks'移出$('#hpiLookupContainer')。load()',它将不会被调用。 – Tsar 2013-03-21 15:45:46

+0

@Chuck - 现在试试代码,我已经更新:'self.setupInputMasks'到'function(){self.setupInputMasks}'。这应该有所帮助。 – bumerang 2013-03-21 16:03:11

+0

不工作的家伙。 'self'是一个按钮,setupInputMasks是'undefined'。我试着将'var self = this;'移出函数,然后变成'Window',这也是错误的。为什么它不是这样简单:http://stackoverflow.com/questions/8778874 – Tsar 2013-03-21 16:12:16

相关问题