【问题标题】:Materialize CSS Dropdown update DOM innerTextMaterialize CSS Dropdown 更新 DOM innerText
【发布时间】:2019-09-19 21:25:21
【问题描述】:

我有一个使用 Materialize CSS 制作的下拉菜单。当用户单击它时,我试图更改“按钮”上的文本,但由于某种原因它不会更新 DOM。

var changeText;
changeText = function(){
  if(this.innerText === 'test'){
    this.innerText = 'success';
  } else {
    this.innerText = 'test';
  }
  
  $('.dropdown-trigger').dropdown({
    alignment: 'right',
    constrainWidth: false,
    coverTrigger: false
  });
  
  console.log(this.innerText);
};

$( document ).ready(function() {

  $('.dropdown-trigger').dropdown({
    alignment: 'right',
    constrainWidth: false,
    coverTrigger: false
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet"/>

<!-- Dropdown Trigger -->
<a class='dropdown-trigger btn' href='#' data-target='dropdown1'>Drop Me!</a>

<!-- Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'>
  <li><a href="#" onclick="changeText()">test</a></li>
</ul>

我已经尝试重新初始化下拉触发器,希望能够更新 DOM,但它没有任何效果。尽管您可以在控制台日志中看到,innerText 已按预期更改。

【问题讨论】:

    标签: javascript materialize


    【解决方案1】:

    this 在这里引用窗口对象。所以试试event.target

    var changeText;
    changeText = function(){
      if(event.target.innerText === 'test'){
        event.target.innerText = 'success';
      } else {
        event.target.innerText = 'test';
      }  
      console.log(this.innerText);
    };
    
    $( document ).ready(function() {
    
      $('.dropdown-trigger').dropdown({
        alignment: 'right',
        constrainWidth: false,
        coverTrigger: false
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet"/>
    
    <!-- Dropdown Trigger -->
    <a class='dropdown-trigger btn' href='#' data-target='dropdown1'>Drop Me!</a>
    
    <!-- Dropdown Structure -->
    <ul id='dropdown1' class='dropdown-content'>
      <li><a href="#" onclick="changeText()">test</a></li>
    </ul>

    【讨论】:

    • 太棒了!这似乎是完美的 :D 非常感谢!
    【解决方案2】:

    要引用元素,您必须像下面这样传递引用

    var changeText;
    changeText = function(ele){
      if(ele.innerText === 'test'){
        ele.innerText = 'success';
      } else {
        ele.innerText = 'test';
      }
    
      $('.dropdown-trigger').dropdown({
        alignment: 'right',
        constrainWidth: false,
        coverTrigger: false
      });
    
    };
    
    $( document ).ready(function() {
    
      $('.dropdown-trigger').dropdown({
        alignment: 'right',
        constrainWidth: false,
        coverTrigger: false
      });
    });
    
    
    
    
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet"/>
    
    <!-- Dropdown Trigger -->
    <a class='dropdown-trigger btn' href='#' data-target='dropdown1'>Drop Me!</a>
    
    <!-- Dropdown Structure -->
    <ul id='dropdown1' class='dropdown-content'>
      <li><a href="#" onclick="changeText(this)">test</a></li>
    </ul>
    

    【讨论】:

    • 谢谢 :) 这不是最优雅的解决方案,但它有效 ^^
    【解决方案3】:

    this指的是window,更新$('.dropdown-trigger')[0]innerText

    var changeText;
    changeText = function(e) {
      if (e.innerText === 'test') {
        $('.dropdown-trigger')[0].innerText = 'success';
      } else {
        $('.dropdown-trigger')[0].innerText = 'test';
      }
    
      $('.dropdown-trigger').dropdown({
        alignment: 'right',
        constrainWidth: false,
        coverTrigger: false
      });
    };
    
    $(document).ready(function() {
    
      $('.dropdown-trigger').dropdown({
        alignment: 'right',
        constrainWidth: false,
        coverTrigger: false
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" rel="stylesheet" />
    
    <!-- Dropdown Trigger -->
    <a class='dropdown-trigger btn' href='#' data-target='dropdown1'>Drop Me!</a>
    
    <!-- Dropdown Structure -->
    <ul id='dropdown1' class='dropdown-content'>
      <li><a href="#" onclick="changeText(this)">test</a></li>
      <li><a href="#" onclick="changeText(this)">test 2</a></li>
    </ul>

    【讨论】:

    • 谢谢!不过,我会接受另一个答案,因为我不能直接针对单个菜单(有多个菜单)。所以使用事件似乎更有意义:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多