编程问题第一(来自w3学校)
下面的编程示例方式(来自W3学校)非常简单,它可以在他们的网站上运行,但我真的很困惑。
onkeypress="return noNumbers(event)"
为什么在函数之前有一个返回?它有什么作用?如果您知道答案 - 您是如何找到这些信息的?我的猜测是,它允许keypressed函数继续处理击键,因为我的事件“中断了”吗?
也 - 我一直试图看看'事件'是什么。它似乎不是一个关键字。我花了>小时试图找到它是什么。它似乎没有在其代码示例中的任何位置分配。通常在那个地方你会看到'这个'。如果它是一个未分配的变量,它总是会传递事件处理程序吗?困惑...
我想用他们的功能
我想在您输入时设置密码强度检查器。我正在看他们的例子,所以我可以弄清楚如何捕获密钥(跨浏览器和最小的IE7)。我的想法是......
<input type="password" name="pword" maxlength="50" size="50" id="field_pword" onkeyup="PasswordStrength(name, 8, 'relaxed')" onblur="CheckField(name, 8, 1)">
注意: 是的,我知道最好在html之外分配事件处理程序,但我看不到将变量传递给它的方法,除非它是内联的。我是一个新手,所以我可能忽略了一些东西,但这就是为什么我在HTML中这样做。
也 ,是不是我如何传递名字?它确实发送pword函数但我在那里做错了吗?我应该把它变成一个恒定的字符串吗?它按原样工作,但有时只是因为某些东西起作用......并不意味着它是正确的。 :)
onkeyup="PasswordStrength('pword', 8, 'relaxed')" onblur="CheckField('pword', 8, 1)">
我的checkfield函数有效(我在每个字段之后使用它)我最近在PasswordStrength中添加了。我的问题是......我的新功能不是通过事件处理程序,所以如何检查按下了什么键?我可以这样做吗?
onkeyup="PasswordStrength(name, 8, 'relaxed', event)"
或应该阅读......
onkeyup="return PasswordStrength(name, 8, 'relaxed', event)"
如果我无法传递任何“事件”,那么在我的功能中,我可以准确地获得按下的键是什么而没有大量的代码?自从我学习以来,我需要尽可能简单的例子(请)。
使用我的功能我会这样做,但我仍然不知道如何按下按键...
function PasswordStrength(sField, iMinLength, sStrength, e?)
{
var form = document.forms[0];
var gc = form[sField].value;
// once I have the value I can do checking but it would be nice to have WHAT key
// was pressed
// the e? above is where I was thinking of passing the event
W3示例我从...中提取了一些知识
function noNumbers(e)
{
var keynum;
var keychar;
var numcheck;
if(window.event) // IE
{
keynum = e.keyCode;
}
else if(e.which) // Netscape/Firefox/Opera
{
keynum = e.which;
}
keychar = String.fromCharCode(keynum);
numcheck = /\d/;
return !numcheck.test(keychar);
}
</script>
<form>
Type some text (numbers not allowed):
<input type="text" onkeypress="return noNumbers(event)" />
</form>
</body>
</html>
当有人打字时,我打算使用密码字段旁边的innerHTML更改文本,说“Weak”,“Ok”,“Good”,“Perfect”或其他类似密码状态的内容。我喜欢这样做谷歌如何使用该字段左侧的图形,但我不知道如何做到这一点。洛尔。
我的方式可以修复吗?你有更好的方法来做我不知道的事吗?非常感激。等待智慧的注入......
答案 0 :(得分:2)
仅针对您的第一个编程问题:
false
内返回onclick
将在点击结束时结束。所以如果<a href="http://test.de"
onclick="return false;">linkname</a>
不会将你链接到任何东西
JavaScript处于活动状态。event
只是在它遇到实际事件之前声明的变量,下面将进一步说明。你知道JavaScript中的元素eventhandler属性吗? 它们是功能,即
document.createElement('div').onclick = function( event ){
//do something...
return true || false;
};
如果为标记分配onclick
属性,则只是另一种调整方式来创建此匿名函数。所以
<input onclick="this.value = 'can\'t click me :P Mouse X: ' + event.clientX; return false;" type="text" id="ip" />
的行为就像你创建了一个带有参数event
的匿名函数。
window.onload = function(){
document.getElementById('ip').onclick = function( event ){
this.value = 'can\'t click me :P Mouse X: ' + event.clientX; return false;
};
};
除延迟分配外,这种行为完全相同。
this
关键字始终是您正在访问其属性函数的所有者对象,或者是您传递给apply
/ call
方法的对象。在这种情况下,它显然是所有者 - DOM元素。因此this.value
是input
的值。
传递给函数的event
只是一个对象,包含有关当前浏览器状态和杂项的一些有用信息。它具有略微不同的属性,在不同的浏览器中填充不同的值,但主要功能在任何地方都是相同的。
window.onload = function(){
var yourElement = document.getElementsByTagName('pword')[0];
yourElement.onkeyup = function( event ){
PasswordStrength(this.name, 8, 'relaxed')
};
};
name
并不是错误 ..每当您访问所有者对象的属性时,您都可以省略this
关键字。因此,这与写作<script type="text/javascript">//<![CDATA[
onload = function(){ alert('hello!') };
//]]></script>
而不是window.onload
或this.onload
或甚至this.window.onload
(这些都在理论上有效,因为包含对象的所有内容都有一个名为window
的属性,它引用了自身)。你可以说这是一个惯例问题。但是,由于总是通过this
关键字访问自己的属性(除window
除外,你应该通过其属性window
访问)的约定已得到强烈建立和支持,因此您可能应该编写{{ 1}}。
this.name
。上面解释过。keyup
对象?只需将其视为正常变量即可。答案 1 :(得分:1)
1)“return”一词使得如果函数返回false
,它将被传递回事件并停止浏览器处理击键(并且如果是那样,则出现在输入字段中)事件是什么)。
2)event
是Event对象,其中包含有关事件的信息,例如按下的键,触发事件的位置等。
3)是的,你传递name
的方式很糟糕,因为你没有传递它。请改用this.name
。
4)在这种情况下,您不需要return
因为您没有尝试停止将键击添加到文本框中。同样,您无需传递event
,因为您可以通过this.value
来获取文本框的内容。
5)您只需传递this
而不是this.name
,this.value
或其他任何值。然后,在函数中,从单个参数中获取属性。
6)一旦用this.value
传递整个值,就可以对其进行测试。绝对没有必要知道按下了什么键,特别是像Ctrl+V
之类的东西会让你完全搞砸。
7)您可以拥有<div>
并更改其宽度和/或背景颜色,以制作一种强度条指示器。