Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何jQuery JavaScript条件语句(初学者)_Javascript_Jquery - Fatal编程技术网

如何jQuery JavaScript条件语句(初学者)

如何jQuery JavaScript条件语句(初学者),javascript,jquery,Javascript,Jquery,如果这是一个过于简单的问题,我深表歉意,但我的搜索毫无结果 我有一个jQuery函数,它会在我的一些页面上产生错误,这些页面不包含#消息输入: Error: jQuery("#message").val() is undefined Line: 56 和我的jQuery函数: function updateCountdown() { var $left = 255 - jQuery( '#message' ).val().length; jQuery( '#countdown

如果这是一个过于简单的问题,我深表歉意,但我的搜索毫无结果

我有一个jQuery函数,它会在我的一些页面上产生错误,这些页面不包含
#消息
输入:

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 );
});

所以我的问题是,如何使用条件从没有
#message
输入的页面中删除错误消息?我认为我的问题是对JavaScript的工作原理缺乏基本的了解。

改进您的选择器,以确保它实际上获得了一个输入元素(因此有一个值)。然后在使用选择器之前检查它是否与任何内容匹配。请注意,返回的jQuery对象的
length
是匹配元素的数量(必须大于0)。哦,只要与其他javascript框架没有任何冲突,就可以始终使用
$
函数

function updateCountdown() 
{
    var msg = $('input#message');
    if (msg.length > 0) { 
        var $left = 255 - msg.val().length; 

        $( '#countdown' ).text( $left + ' Characters Remaining' );
    }
}

您只需要检查jQuery对象是否包含任何项。我会这样做

$( document ).ready( function()
{
    var $message = jQuery( '#message' );
    if($message.length > 0) {
        updateCountdown();

        $( '#message' ).change( updateCountdown );
        $( '#message' ).keyup( updateCountdown );
    }
});
然后,我将您的
updateCountdown()
函数更改为使用
this
关键字,而不是执行另一个jQuery查找。jQuery将
这个
设置为事件发生的DOM元素

function updateCountdown()
{
    var $left = 255 - jQuery( this ).val().length;

    jQuery( '#countdown' ).text( $left + ' Characters Remaining' );
}

我不想费心对从选择器返回的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(…)
调用将不会执行任何操作

唯一的问题是init代码。。之后一切都会好起来的。我们也要这样做:

$( document ).ready( function()
{
    $( '#message' ).change( updateCountdown ).keyup( updateCountdown ).keyup();
});
注意链接的使用