切换内容可编辑属性

时间:2018-11-14 08:49:13

标签: jquery contenteditable

为什么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 :(得分:1)

问题是因为您在attr()语句中使用了if setter 。这意味着您的if实际上是在说'if(存在jQuery对象)',始终为true

要解决此问题,请使用attr() getter 检索值并在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>