我正在写一个计数器代码。我有以下功能,需要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和其他两个参数的值未定义。这段代码有什么问题?
答案 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'))
});