任何人都可以用英语向我解释这个吗?

时间:2011-04-27 12:27:31

标签: javascript

“whatYouTyped.parentNode;”有人可以打破这一点来解释它的确切感谢吗?

function checkphone(whatYouTyped) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
 if ( /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/.test(txt)) {
    fieldset.className = "welldone";
    compphone=true;
} else {
    fieldset.className = "";
    compphone=false;
}

}

5 个答案:

答案 0 :(得分:1)

假设您有以下内容:

<div><input type="text" onBlur="checkphone(this)"/></div>

然后whatYouTyped.parentNode将返回对div的父节点input的引用。

答案 1 :(得分:0)

whatYouTyped必须是对元素的引用。这个语句停止对whatYouTyped节点的父元素(容器)的引用。我猜这个语句之前会有像{{{{1}这样的行。 1}}

您已编辑了您的问题。请参阅您正在将元素的引用传递给该函数。 您的语句将返回对此元素的父级的引用

答案 2 :(得分:0)

看起来该函数接受一个属于某种元素的参数。该函数首先找到元素的父元素,并将其分配给变量fieldset。

然后获取原始元素的值(whatyoutyped),并根据正则表达式进行检查。如果模式匹配,则更改父元素的类并将'compphone'设置为true。语法看起来有点奇怪。

没有任何上下文,很难说这是为了什么,但它似乎正在检查某种输入/文本元素与正则表达式 - 某种验证。

答案 3 :(得分:0)

如果不使用一些术语,很难用英语来描述它!

whatYouTyped是一个已设置为指向DOM树中元素的变量。

whatYouTyped.parentNode是此元素的父元素。

更详细地解释:

DOM树是网页的结构,由浏览器保存在内存中。 HTML代码中的每个标记都由此树结构中的元素表示。

Javascript能够直接访问此树的任何部分,通常使用getElelementById()函数(尽管有很多其他路径可以获取元素)。

whatYouTyped变量可能已设置为使用getElementById()或类似内容指向DOM树中的给定元素。

DOM树结构的一部分是能够在树中的元素之间导航。 parentNode是允许您执行此操作的方法之一;它返回当前树之上的树中的元素。

在这种情况下,您可能会看到如下所示的HTML代码:

<fieldset id='outerLayer'>
    <input type='text' id='whatYouTyped' value='This is what you typed' />
    <input type='text' id='somethingElse' value='This is something else' />
</fieldset>

你的代码可能做过这样的事情:

var whatYouTyped = document.getElementById('whatYouTyped');

至此,您提供的代码是有意义的,因为whatYouTyped变量现在设置为DOM树中的元素。要求whatYouTyped.parentNode将为您提供outerLayer元素。

查看您提供的代码,如果输入通过验证,它看起来好像正在更改包装输入字段的元素的类。这将允许它执行诸如更改背景颜色之类的操作,或者在字段旁边添加刻度图标,或者如果用户输入有效字符串,则执行此类操作。

希望有所帮助。

[编辑]

根据对问题的编辑,我已经改变了一点。基本答案仍然是相同的。

答案 4 :(得分:0)

根据你在SO的其他问题,你有

<fieldset>
  <label for="Phone">Phone:</label>
  <input type="text" id="Phone" onkeyup="checkphone(this);" />
  <span class="hint">This Feld Must Be Numeric Values Only !</span>
</fieldset>

(this)将输入字段对象传递给函数,函数查看它的parentNode,它的上面是<fieldset>,然后将类设置为空或者没有 - 我建议你改变< em> whatyoutyped 到 inputField ,例如它更有意义。

定义函数时,放在函数()中的单词将是传递给函数的变量的名称。所以

function foo(bar) {
  alert(bar);
}
如果你像foo("Hello")

那样打电话,

会提醒您

你的情况

function checkphone(whateverYouWantToCallThePhoneFieldObjectInTheFunction) {
  do something with whateverYouWantToCallThePhoneFieldObjectInTheFunction
}

并且可以将其更改为更具可读性的内容:

function checkphone(inputField) {
  do something with inputField
}

仍然使用

传递它
<input onblur="checkphone(this)"

因为这是如何在自己的事件处理程序中传递对象