2010-02-16 61 views
2

道歉,如果這是一個非常簡單的問題,但我的搜索讓我無處可去。如何jQuery JavaScript條件語句(初學者)

我有一些我的網頁不包含#message輸入產生一個錯誤,一個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如何工作的知識。

回答

1

唯一的問題是你的init代碼..之後,它會運行良好。所以呢:

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

注意使用鏈接。

1

改進您的選擇器以確保它實際上獲取輸入元素(以便有值)。然後檢查您的選擇器在使用之前是否實際匹配了任何東西。請注意,返回的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'); 
    } 
} 
0

你只需要檢查jQuery對象是否包含任何項目。我會這樣做。

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

     $('#message').change(updateCountdown); 
     $('#message').keyup(updateCountdown); 
    } 
}); 

然後我會改變你的updateCountdown()功能使用this關鍵字,而不是去做其他的jQuery查找。 jQuery將this設置爲發生事件的DOM元素。

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

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

這可以簡化。 – Pointy 2010-02-16 23:17:42

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(...)調用不會做任何事情。