提问人:Jeff 提问时间:2/17/2010 更新时间:2/17/2010 访问量:355
如何 jQuery JavaScript 条件语句(初学者)
How To jQuery JavaScript conditional statement (beginner)
问:
如果这是一个过于简单的问题,请道歉,但我的搜索一无所获。
我有一个jQuery函数,它在我的一些不包含输入的页面上产生错误:#message
Error: jQuery("#message").val() is undefined
Line: 56
还有我的jQuery函数:
function updateCountdown()
{
var $left = 255 - jQuery( '#message' ).val().length;
jQuery( '#countdown' ).text( $left + ' Characters Remaining' );
}
$( document ).ready( function()
{
updateCountdown();
$( '#message' ).change( updateCountdown );
$( '#message' ).keyup( updateCountdown );
});
所以我的问题是,如何使用条件从没有输入的页面中删除错误消息?我相信我的问题是对 JavaScript 如何工作的基本知识缺乏了解。#message
答:
1赞
tvanfosson
2/17/2010
#1
改进选择器以确保它实际上正在获取输入元素(以便有一个值)。然后检查你的选择器是否真的匹配了任何东西,然后再使用它。请注意,返回的 jQuery 对象是匹配元素的数量(它必须大于 0)。哦,只要与其他 javascript 框架没有任何冲突,您就可以始终如一地使用该函数。length
$
function updateCountdown()
{
var msg = $('input#message');
if (msg.length > 0) {
var $left = 255 - msg.val().length;
$( '#countdown' ).text( $left + ' Characters Remaining' );
}
}
0赞
mjobrien
2/17/2010
#2
您只需要检查jQuery对象是否包含任何项目。我会这样做。
$( document ).ready( function()
{
var $message = jQuery( '#message' );
if($message.length > 0) {
updateCountdown();
$( '#message' ).change( updateCountdown );
$( '#message' ).keyup( updateCountdown );
}
});
然后,我会更改您的函数以使用关键字,而不是执行另一个jQuery查找。jQuery 设置为发生事件的 DOM 元素。updateCountdown()
this
this
function updateCountdown()
{
var $left = 255 - jQuery( this ).val().length;
jQuery( '#countdown' ).text( $left + ' Characters Remaining' );
}
3赞
Pointy
2/17/2010
#3
我不会费心对从选择器返回的 jQuery 对象执行显式测试——让 jQuery 为您完成!
$(function() {
$('#message').each(function() {
var $self = $(this);
$self.bind('change keyup', function updateCountdown() {
$('#countdown').text((255 - $self.val().length)) + ' characters remaining');
});
});
});
如果“#message”与任何内容不匹配,则调用不会执行任何操作。.each( ... )
1赞
CurtainDog
2/17/2010
#4
唯一的问题是你的初始化代码。在那之后,它会运行良好。所以做:
$( document ).ready( function()
{
$( '#message' ).change( updateCountdown ).keyup( updateCountdown ).keyup();
});
请注意链接的使用。
评论