Нажмите на отделение для переключения флажка в нем с помощью JavaScript

Пример для начинающих

Если вы пытаетесь получить доступ к «user.name», но тогда это происходит:

Uncaught TypeError: Cannot read property 'name' of undefined 

Не бойтесь. Вы можете решить это, используя & amp; & amp; оператор в задании или часто называемый сторожевым оператором, так как он «защищает» от неопределенной ошибки.

Вот несколько примеров, которые вы можете найти нечетными, но продолжайте читать, как объясняется позже.

var user = undefined;
var username = user && user.username;
// no error, "username" assigned value of "user" which is undefined

user = { username: 'Johnny' };
username = user && user.username;
// no error, "username" assigned 'Johnny'

user = { };
username = user && user.username;
// no error, "username" assigned value of "username" which is undefined

Объяснение: В режиме охраны каждый термин оценивается слева направо по одному. Если оцениваемое значение является ложным, оценка останавливается и это значение затем назначается. Если последний элемент достигнут, тогда ему присваивается, является ли он ложным.

ложь означает, что это любое из этих значений undefined, false, 0, null, NaN, '', а правда просто означает НЕ ложь.

Легкая кнопка для метода Guard

Используйте прекрасный защитный оператор lodash для доступа к вложенным данным следующим образом:

// need to access obj.has.some.very.nested.stuff
var val = _.get(obj, 'has.some.very.nested.stuff');

, поскольку он обрабатывает & amp; & amp; & amp; & amp; материал под капотом, будучи приятным в использовании удобным способом. Исходный код Lodash _.get

Бонус: Оператор OR

Другим полезным странным назначением, которое в практическом использовании, является оператор OR, который обычно используется для таких плагинов:

this.myWidget = this.myWidget || (function() {
   // define widget
})();

, который будет назначать только часть кода, если «this.myWidget» является ложным. Это удобно, потому что вы можете объявлять код в любом месте и несколько раз, не заботясь о том, был ли он назначен или нет ранее, зная, что он будет назначен только один раз, поскольку люди, использующие плагин, могут несколько раз объявлять ваш скриптовый тег src несколько раз.

Объяснение: Каждое значение оценивается слева направо, по одному за раз. Если значение является правдивым, оно прекращает оценку и присваивает это значение, в противном случае продолжает движение, если последний элемент достигнут, он присваивается независимо от того, является ли он ложным или нет.

Дополнительный кредит: Объединение и amp; & амп; и || в задании

Теперь у вас есть максимальная сила и вы можете делать очень странные вещи, такие как этот очень странный пример использования его в палиндроме.

function palindrome(s,i) {
 return (i >= s.length/2) || (s[i] === s[s.length -1 - i]) && palindrome(s, ++i);
}

Подробное объяснение здесь: Проверка палиндрома в Javascript

Счастливое кодирование.

19
задан occhiso 25 February 2009 в 00:16
поделиться

4 ответа

Возможно, что Вы могли реализовать это более устойчивым и доступным способом при помощи элемента маркировки для обертывания области, которую Вы хотите нажать.

, Например:

<label for="cb">
    <div style="padding: 2em; border: 1px solid">
        <input name="cb" id="cb" type="checkbox">
    </div>
</label>

я не протестировал вышеупомянутый код, но я полагаю, что все нажатие поддержки браузеров маркировок проверяет поле ввода.

38
ответ дан 30 November 2019 в 02:56
поделиться
onclick="if (event.target.tagName != 'INPUT') document.getElementById('cb').checked = !document.getElementById('cb').checked"
4
ответ дан 30 November 2019 в 02:56
поделиться

Корень проблемы - то, что при нажатии на флажок событие щелчка распространено DOM к родительским элементам.

, Таким образом, флажок обрабатывает событие щелчка путем переключения себя, и затем DIV получает событие щелчка и переключает флажок снова.

простое решение состояло бы в том, чтобы остановить распространение события путем добавления этого к входному элементу:

onClick="event.stopPropagation();"

, В то время как это определяется в Модели событий Уровня 2 W3C DOM, она не может поддерживаться во всех браузерах, таким образом, можно хотеть пользоваться библиотекой перекрестного браузера как Прототип или jQuery для обеспечения совместимости.

1
ответ дан 30 November 2019 в 02:56
поделиться

изучите использование jQuery вместо того, чтобы программировать против dom сами. пользование библиотекой как jQuery означает, что Ваш код, более вероятно, будет работать над большинством браузеров

http://docs.jquery.com/Effects/toggle

0
ответ дан 30 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: