我有一个下拉菜单与物化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已按预期进行了更改。
发布于 2019-09-19 21:22:53
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>
发布于 2019-09-19 21:23:12
要引用元素,您必须像下面这样传递引用
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>发布于 2019-09-19 21:25:21
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>
https://stackoverflow.com/questions/58011826
复制相似问题