代码之家  ›  专栏  ›  技术社区  ›  Jeff

如何jquery javascript条件语句(初学者)

  •  2
  • Jeff  · 技术社区  · 16 年前

    如果这是一个过于简单的问题,我很抱歉,但我的搜索结果却让我无处可逃。

    我有一个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如何工作的基本了解不足。

    4 回复  |  直到 16 年前
        1
  •  1
  •   CurtainDog    16 年前

    唯一的问题是你的初始化代码。之后,一切都会好起来的。也可以这样做:

    $( document ).ready( function()
    {
        $( '#message' ).change( updateCountdown ).keyup( updateCountdown ).keyup();
    });
    

    注意链条的使用。

        2
  •  3
  •   Pointy    16 年前

    我不会费心对从选择器返回的jquery对象执行显式测试-让jquery为您做这件事!

    $(function() {
      $('#message').each(function() {
        var $self = $(this);
        $self.bind('change keyup', function updateCountdown() {
          $('#countdown').text((255 - $self.val().length)) + ' characters remaining');
        });
      });
    });
    

    如果“消息”不匹配,则 .each( ... ) 打电话什么都不做。

        3
  •  1
  •   tvanfosson    16 年前

    改进选择器以确保它实际上得到一个输入元素(这样就有了一个值)。然后在使用选择器之前检查它是否真的匹配了任何内容。请注意 length 返回的jquery对象是匹配元素的数目(必须大于0)。哦,你可以一直使用 $ 只要与其他JavaScript框架没有任何冲突,就可以使用。

    function updateCountdown() 
    {
        var msg = $('input#message');
        if (msg.length > 0) { 
            var $left = 255 - msg.val().length; 
    
            $( '#countdown' ).text( $left + ' Characters Remaining' );
        }
    }
    
        4
  •  0
  •   mjobrien    16 年前

    您只需要检查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' );
    }