переключатель contenteditable attr

Почему строка obj.attr(b, 'false').blur(); не работа? Что здесь не так?

 $('#btnren').on('click', function() { let obj = $('#cptitlea'); let b = 'contenteditable'; if (obj.attr(b, 'false')) { obj.attr(b, 'true').focus(); // this works } else { obj.attr(b, 'false').blur(); // doesn't work } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id='cptitlea'>323</div> <br> <button id='btnren'>CLICK</button> 

Всего 1 ответ


Проблема в том, что вы используете setter attr() в выражении if . Это означает, что ваш if на самом деле говорит «если (объект jQuery существует)», что всегда true .

Чтобы исправить это, используйте getter attr() чтобы извлечь значение и использовать его в выражении if . Обратите внимание, что вы можете упростить логику, предоставив функцию attr() которая возвращает новое значение, которое будет установлено, на основе текущего. Попробуй это:

 $('#btnren').on('click', function() { let $el = $('#cptitlea'); let b = 'contenteditable'; $el.attr(b, function(i, v) { return v === 'true' ? false : true; }).focus(); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id='cptitlea'>323</div> <br> <button id='btnren'>CLICK</button> 


Есть идеи?

10000