此功能应该将某些数字推送到我要在视图中显示的数组。
jQuery(document).ready(function() {
var SideNav = $('.side-nav'),
NavTrigger = $('.nav-trigger'),
Content = $('.content'),
ApartmentAlarm = $('#Alarm'),
$('.ui-flipswitch').click(function(){console.log($(this).hasClass('ui-flipswitch-active') ? 'On' : 'Off')})
NavTrigger.on('click', function(event) {
event.preventDefault();
alert("click works");
$([SideNav, NavTrigger]).toggleClass('nav-visible');
});
ApartmentAlarm.on('click', function() {
//event.preventDefault();
Content.load('alarm.html');
$([SideNav, NavTrigger]).toggleClass('nav-visible');
});
<html>
<head>
<title></title>
<link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<form>
<label for="LeftSwitch">Left Light:</label>
<input type="checkbox" data-role="flipswitch" name="LeftSwitch" id="LeftSwitch">
<br>
<label for="RightSwitch">Right Light</label>
<input type="checkbox" data-role="flipswitch" name="RightSwitch" id="RightSwitch">
</form>
<script type="text/javascript">
$(document).ready(function() {
console.log('hello');
$('#LeftSwitch').on('flipswitchcreate', function(event, ui) {
alert('me')
});
//$('.ui-flipswitch').click(function(){console.log($(this).hasClass('ui-flipswitch-active') ? 'On' : 'Off')})
})
</script>
</body>
</html>
<html>
<head>
<title>
</title>
<link rel="stylesheet" href="apt.css">
</head>
<body>
<header class="page-header">
<div class="apartment-name">Carlson Casa</div>
<div class="data-top">
<ul class="top-data">
<li>Time</li>
<li>Outside Temp</li>
<li>Inside Temp</li>
<li><a href="#0" class="nav-trigger">Menu<span></span></a></li>
</ul>
</div>
</header>
<main class="main-content">
<nav class="side-nav">
<ul>
<li><a href="#">Apartment</a></li>
<li class="nav-label">Living Room</li>
<li><a href="#" id="Alarm">Alarm control</a></li>
<li><a href="#" id="Chandelier">Chandelier</a></li>
<li class="nav-label">Bedroom</li>
<li><a href="#" id="BedroomLights">Lights</a></li>
<li><a href="#" id="AlarmClock">Alarm Clock</a></li>
</ul>
</nav>
<div class="content">
Controls go here
</div>
</main>
<script src="jquery-2.1.4.js"></script>
<script src="main.js"></script>
</body>
</html>
一切正常,但一旦我加入&#34; this.array.push(i)&#34;它一直刷新我的页面提交(在提交时调用此功能)。我删除它,一切正常,它以正确的方式迭代,找到它应该做的数字和一切。即使我在函数内部创建数组并推送它,它也可以正常工作,但是当我将它作为一个类使用它时,它就会成为一个&#34; atribute&#34;并使用&#34;这个&#34;作为参考它不起作用(开始刷新)。
@Component({
selector: 'app-task2',
templateUrl: './task2.component.html',
styleUrls: ['./task2.component.css']
})
export class Task2Component implements OnInit {
array: [number];
input;
constructor() {}
ngOnInit() {}
}
答案 0 :(得分:1)
我知道它看起来很奇怪,但是窍门很简单。
只需初始化数组,重新加载问题就消失了。
array: number[] = [];
我的代码刚刚遇到了这个问题,这个技巧解决了这个问题。
答案 1 :(得分:0)
目前只在您的问题中显示了javascript,因此我猜测模板包含的内容。我假设您的代码旨在分解数字?
我怀疑多次刷新的原因是您的模板被编程为在更新时显示this.array
。如果您输入的数字有很多因素,您会看到许多刷新。
我是否正确地说当你输入一个素数时,你只需要一次刷新,即正确的行为?如果是这样,那么您可以通过对单独的变量执行所有push
,然后将该单独的变量复制到this.array
来修复它。例如:
onSubmit() {
let nextArray = [];
for(var i=2; i<=this.input; i++) {
if(this.input % i == 0) {
this.input /= i;
nextArray.push(i);
// Remove this line: return this.onSubmit();
}
}
this.array = nextArray;
this.input = "";
}
当分解N时,一旦你看到(包括)sqrt(N),就没有必要查看sqrt(N)和N之间的其他数字:它们不能是因子。所以你可以修改循环的第一行。 Squaring比平方根更快,因此您可以测试i*i<=this.input
的速度而不是i<=Math.sqrt(this.input)
。如果它不是1,你只需要记住push
this.input的最终值,因为这将是最大的因素。
onSubmit() {
let nextArray = [];
for(var i=2; i*i<=this.input; i++) {
if(this.input % i == 0) {
this.input /= i;
nextArray.push(i);
}
}
if (this.input !==1){
nextArray.push(this.input);
}
this.array = nextArray;
this.input = "";
}
我怀疑您当前的代码无法正确分解具有相同因子多次的数字。例如,它仅测试一个数字是否可被5整除。因此,如果this.input
为250,即2 * 5 * 5 * 5,则输出2,5,25。
要抵消这种情况,如果您没有找到因素,则可以将i
递增至仅。因此,当您找到一个因子时,for
的下一个周期将测试相同的因子,随后的周期将继续测试相同的因子,直到它不再是一个因素。 / p>
onSubmit() {
let nextArray = [];
for(var i=2; i<=this.input;) {
if(this.input % i == 0) {
this.input /= i;
nextArray.push(i);
} else {
i++;
}
}
this.array = nextArray;
this.input = "";
}