JS和Jquery函数参数未定义

时间:2015-03-25 12:11:24

标签: javascript jquery

我正在写一个计数器代码。我有以下功能,需要4个参数。 ' fieldSelector'是文本区域的id或类选择器,' msgSelector'是必须显示文本消息的范围。 '分钟'和' max'是文本的最小和最大限制。

  function updateCountdown(min, max, fieldSelector, msgSelector) {

    alert(msgSelector)

    var chars = jQuery(fieldSelector).val().length;
    var remaining = max - chars;
    if (chars < min){
      var moreChars = min - chars;
      jQuery(msgSelector).addClass('text-danger');
      if (chars == 0)
        jQuery(msgSelector).text('You need to add atleast ' + moreChars + ' characters.');
      else if (chars == min-1)
        jQuery(msgSelector).text('You need to add atleast ' + moreChars + ' more character.');
      else
        jQuery(msgSelector).text('You need to add atleast ' + moreChars + ' more characters.');
    }
    else
    {

      jQuery(msgSelector).removeClass('text-danger');
      if (remaining <=10)
        jQuery(msgSelector).addClass('text-danger');

      if (remaining == 1)
          jQuery(msgSelector).text('You can add only ' + remaining + ' more character.');  
      else if (remaining > 0)
          jQuery(msgSelector).text('You can add ' + remaining + ' more characters.');
      else if (remaining == 0)
        jQuery(msgSelector).text('Your limit has been ended.');
      else if (remaining == -1)
        jQuery(msgSelector).text('You have exceded ' + (-remaining) + ' character.');
      else 
        jQuery(msgSelector).text('You have exceded ' + (-remaining) + ' characters.');

  }
}

我按照以下方式调用此部分。

 $(document).ready(function(){


 $('#profile_short_description_textarea').change(updateCountdown(100,150,'#profile_short_description_textarea', '#short_description_message'));
    $('#profile_short_description_textarea').keyup(updateCountdown(100,150,'#profile_short_description_textarea', '#short_description_message'));

});

参数值min,max,fieldSelector和msgSelector仅在加载文档时第一次传递。 min,max和其他两个参数的值未定义。这段代码有什么问题?

4 个答案:

答案 0 :(得分:2)

像这样使用

$('#profile_short_description_textarea').change(function() {
    updateCountdown(100, 150, '#profile_short_description_textarea', '#short_description_message');
});
$('#profile_short_description_textarea').keyup(function() {
    updateCountdown(100, 150, '#profile_short_description_textarea', '#short_description_message');
});

答案 1 :(得分:1)

将函数添加到回调中,而不是直接添加到change()

$('#profile_short_description_textarea').change(function() {
    updateCountdown(100,150,'#profile_short_description_textarea', '#short_description_message');
});

答案 2 :(得分:1)

您需要执行以下操作。

$(function() {
    $('#profile_short_description_textarea').on("keyup change", function() {
        updateCountdown(100,150,'#profile_short_description_textarea', '#short_description_message');
    });
});

P.S。我已将多个事件合并为一个,因为它是在同一个元素上触发的!

由于以下是错误的!

$('#profile_short_description_textarea').change(updateCountdown(100,150,'#profile_short_description_textarea', '#short_description_message'));

当函数没有参数时,你可以这样做,例如,

$('#profile_short_description_textarea').change(updateCountdown);

功能可能如下所示:

function updateCountdown() {...}

答案 3 :(得分:0)

因为只有第一次事件Initialize..after而不是你需要重新初始化这两个事件时才会发生任何事情。

所以试试这个..确定工作

   $(document).ready(function(){

$('body' or any parent element id or class of profile_short_description_textarea ).on("change",'#profile_short_description_textarea',updateCountdown(100,150,'#profile_short_description_textarea', '#short_description_message'))

$('body' or any parent element id or class of profile_short_description_textarea ).on("keyup",'#profile_short_description_textarea',updateCountdown(100,150,'#profile_short_description_textarea', '#short_description_message'))

});