У меня есть некоторый рабочий JavaScript, который управляет некоторыми элементами DOM. Проблема, я не понимаю, почему она работает, который никогда не является хорошей вещью. Я пытаюсь узнать больше об объектно-ориентированных лучших практиках JavaScript и JavaScript, таким образом, организация может казаться немного странной.
В основном я переношу два метода, которые управляют DOM внутри a CSContent
объект. Я создаю экземпляр того объекта, content
в $(document).ready
и свяжите некоторые события с функциями в content
. Однако я смущен относительно того, как эти функции могут все еще быть вызваны после $(document).ready
выходы. Не делает это означает это content
вышел из объема, и его функции не доступны? Так или иначе вот код:
function CSContent() {
var tweetTextArea = document.getElementById('cscontent-tweet'),
tweetTextElement = document.getElementById('edit-cscontent-cs-content-tweet'),
charCountElement = document.getElementById('cscontent-tweet-charactercount');
this.toggleTweetTextarea = function () {
$(tweetTextArea).slideToggle();
};
this.updateTweetCharacterCount = function () {
var numOfCharsLeft = 140 - tweetTextElement.value.length;
if (numOfCharsLeft < 0) {
$(charCountElement).addClass('cscontent-negative-chars-left');
}
else {
$(charCountElement).removeClass('cscontent-negative-chars-left');
}
charCountElement.innerHTML = '' + numOfCharsLeft + ' characters left.';
};
}
$(document).ready(function () {
var content = new CSContent();
//If the twitter box starts out unchecked, then hide the text area
if ($('#edit-cscontent-cs-content-twitter:checked').val() === undefined) {
$('#cscontent-tweet').hide();
}
$('#edit-cscontent-cs-content-twitter').change(content.toggleTweetTextarea);
//Seems wasteful, but we bind to keyup and keypress to fix some weird miscounting behavior when deleting characters.
$('#edit-cscontent-cs-content-tweet').keypress(content.updateTweetCharacterCount);
$('#edit-cscontent-cs-content-tweet').keyup(content.updateTweetCharacterCount);
content.updateTweetCharacterCount();
});