переключить contenteditable attr - PullRequest
0 голосов
/ 14 ноября 2018

Почему линия 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 Ответ

0 голосов
/ 14 ноября 2018

Проблема в том, что вы используете setter из attr() в операторе if. Это означает, что ваш 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>
...