简体   繁体   English

如何从jQuery内部调用JavaScript函数?

[英]How to call a javascript function from inside jQuery?

I am trying to clean up some code and separate it into different functions. 我正在尝试清理一些代码并将其分成不同的功能。 Something is not working and I think it has to do with scope. 某事不起作用,我认为这与范围有关。 I am trying to execute loadSubscriberList() from inside a jQuery change event listener. 我试图从jQuery更改事件侦听器内部执行loadSubscriberList()

showUserList: function (res) {
    $('#cvUser').append('<option value="">  - Select a user - </option ');
    $.each(res.UserList, function (key, value) {
        $('#cvUser').append('<option value="' + value.id + '">' + value.firstName + " " + value.lastName + " " + value.userid + '</option>');
    });

    $('#cvUser').on('keyup change', function () {
        if ($('#cvUser').val()) {
            $('#subscriberSelectView').html('');
            var showSubscribers = $($("#subscriberSelect").text());
            $("#subscriberSelectView").append(showSubscribers);
            this.loadSubscriberList();
        } else {
            $('#subscriberSelectView').html('');
        }
    });
},

loadSubscriberList: function () {
    var postData = {
        'usr': $('#cvUser').val()
    }

    appNS.tpmBase.ajaxReq(
        '',
        postData,
        '/rsc/cvr/gsl',
        null,
        null,
        $.proxy(this.handleShowUserList, this)
    )
},

Uncaught TypeError: this.loadSubscriberList is not a function 未捕获的TypeError:this.loadSubscriberList不是函数

Can you try this, 你可以试试这个吗

$('#cvUser').on('keyup change', function () {
  if($('#cvUser').val()){
    $('#subscriberSelectView').html('');
    var showSubscribers = $($("#subscriberSelect").text());
    $("#subscriberSelectView").append( showSubscribers );
     loadSubscriberList($('#cvUser').val());
  }
  else {
    $('#subscriberSelectView').html('');
  }
});
} ,

loadSubscriberList: function(cvUserVal) {
  var postData = {
   'usr': cvUserVal
  }

changed this.loadSubscriberList() to loadSubscriberList($('#cvUser').val()); this.loadSubscriberList()更改为loadSubscriberList($('#cvUser').val()); and added cvUserVal as a parameter to loadSubscriberList() function. 并将cvUserVal作为参数添加到loadSubscriberList()函数。

In javascript, the meaning of this is dynamic. 在javascript中, this是动态的。

In the inner function, your keyup/change handler, this is the #cvUser element. 在内部功能,您KEYUP /更改处理, this#cvUser元素。

A workaround is to keep a reference to the outer this . 一种解决方法是保留this外部的引用。 By custom we use that . 按照习惯,我们使用that

showUserList: function(res) {
    var that = this;
    ...
    $('#cvUser').on('keyup change', function() {
        ...
        that.loadSubscriberList();
        ...
    });
},

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM