2013-10-07 172 views
0

我有一个自定义jQuery类来创建弹出列表,但是当我将HTML元素传递给类对象时,它是undefined在自定义jQuery类中使用自定义函数功能

我想发送元素到类中,并设置.keyup()事件,并在.keyup()函数中操作元素值。

我的代码是:

$.Class('kpopup', { 
    // static 
    init: function (e, p, h, r, u) { 
     url = u; 
     hostElement = e; 
     popupElement = p; 
     popupResult = r; 
     hiddenElement = h; 

     $(hostElement).keyup(function() { 
      $.ajax({ 
       url: url, 
       data: { "value": $(hostElement).val() }, 
       type: 'POST', 
       success: function (dt) { 
        if (dt != "") { 
         $(popupResult).html(dt); 
         $(hostElement).popupDiv($(popupElement)); 
        } else { 
         $(popupElement).hide(); 
        } 
       } 
      }); 
     }); 
    } 
}, 
//Prototypes 
{}); 

代码使用上面的类:

$(document).ready(function() { 
    var kpopup = new kpopup(
     $("#clas_academy_id"), 
     $(".popup-picker"), 
     $("#clas_academy_id_hidden"), 
     $("#popup-result"), 
     '@Url.Action("searchAcademies","Academy")' 
    ); 
}); 
+1

您已经传递了jQuery的对象类,所以不要做这样的事情:'$(hostElement).val()'。只要执行'hostElement.val()'。 –

+0

我用过,但有错误'输入错误:hostElement.val不是函数' – MasoudKardani

+0

看看所有的全局变量!为什么在这个世界上会使用不把完整的变量名称放在参数中开始! – epascarello

回答

0

也许你可以试试这个,按F12在浏览器或控制+ SHIFT + K在Firefox打开控制台并检查输出。您可以单击一些console.log输出来检查记录的对象的值。

Kpopup = function(e, p, h, r, u) { 
    console.log("creating Kpopup with parameters:", e, p, h, r, u); 
    this.url = u; 
    this.hostElement = e; 
    this.popupElement = p; 
    tis.popupResult = r; 
    this.hiddenElement = h; 
    this.init(); 
}; 
Kpopup.prototype.init = function() { 
    console.log("And this is:", this); 
    console.log("And this hostElement is:", this.hostElement); 
    var pResult = this.popupResult; 
    var hElement = this.hostElement; 
    var pElement = this.popupElement; 
    this.hostElement.keyup(function() { 
    $.ajax({ 
     url: this.url, 
     data: {"value": hElement.val()}, 
     type: 'POST', 
     success: function(dt) { 
     if (dt !== "") { 
      pResult.html(dt); 
      hElement.popupDiv(pElement); 
     } else { 
      pElement.hide(); 
     } 
     } 
    }); 
    }); 
}; 

请注意,我的资本化你的Kpopup对象,因为这对构造函数让你的文件准备好常用符号,你必须利用它还有:

$(document).ready(function() { 
    var kpopup = new Kpopup(
     $("#clas_academy_id"), 
     $(".popup-picker"), 
     $("#clas_academy_id_hidden"), 
     $("#popup-result"), 
     '@Url.Action("searchAcademies","Academy")' 
    ); 
}); 
+0

非常感谢,它的工作...... – MasoudKardani