调用JavaScript方法的正确方法

调用JavaScript方法的正确方法,javascript,methods,Javascript,Methods,我为什么要调用JavaScript方法,原因如下 onClick="Javascript:MyMethod();" 或者我可以这样称呼它: onClick="MyMethod();" $(function() { $('#the-element').click(function() { MyMethod(); }); }); 有什么区别吗?onclick属性的值是code,而不是URI,因此这是正确的(尽管不是唯一的方法,请参见下面的切线1): 这是不正确的

我为什么要调用JavaScript方法,原因如下

onClick="Javascript:MyMethod();"
或者我可以这样称呼它:

onClick="MyMethod();"
$(function() {
    $('#the-element').click(function() {
        MyMethod();
    });
});

有什么区别吗?

onclick属性的值是code,而不是URI,因此这是正确的(尽管不是唯一的方法,请参见下面的切线1):

这是不正确的,但基本上是无害的:

onClick="Javascript:MyMethod();"
有时人们认为后者使用的是
javascript
协议,就像在链接上一样,但事实并非如此。这完全是在做别的事情。
onclick
属性中的代码语言是在页面级别定义的(默认为JavaScript),因此您实际要做的是在JavaScript代码中声明一个标签,然后调用
MyMethod
。JavaScript有标签(见下面的tangent#2),尽管它们使用得不多

链接上的
onclick
属性与
href
属性完全不同:

<a href="javascript:MyMethod();">
您可能有以下HTML:

<ul id='tabset'>
    <li>Tab 1</li>
    <li>Tab 2</li>
    <li>Tab 3</li>
</ul>
…其中,
setTab
使用上下文来确定单击了哪个选项卡并相应地执行操作,并且只要DOM准备就绪,就会调用
hookUpTabs
。请注意,在设置单击处理程序的地方,我们为tab div上的
onclick
分配了一个函数引用,而不是字符串

在上面,我不会实际使用
onclick
,而是通过
addEventListener
(标准)/
attachEvent
(Microsoft)函数使用DOM2处理程序。但我不想进入标准与微软的较量。如果您开始使用不引人注目的JavaScript,您也不会使用库来为您处理这些内容(,)


切线#2

另一个有点离题:那么,这些JavaScript标签是什么呢?规范中的详细信息一如既往,但下面是一个在循环中使用带有定向
break
语句的标签的示例:

var innerIndex, outerIndex;

// Label the beginning of the outer loop with the (creative) label "outerloop"
outerloop: for (outerIndex = 0; outerIndex < 10; ++outerIndex) {

    for (innerIndex = 0; innerIndex < 50; ++innerIndex) {

        if (innerIndex > 3) {
            break; // Non-directed break, breaks inner loop
        }

        if (innerIndex > 2 && outerIndex > 1) {
            // Directed break, telling the code that we want to break
            // out of the inner loop *and* the outer loop both.
            break outerloop;
        }

        display(outerIndex + ":" + innerIndex);
    }
}
var-innerIndex,outerIndex;
//用(创造性的)标签“outerloop”标记外循环的开始
outerloop:for(outerIndex=0;outerIndex<10;++outerIndex){
对于(innerIndex=0;innerIndex<50;++innerIndex){
如果(内部索引>3){
中断;//非定向中断,中断内部循环
}
如果(内部索引>2和外部索引>1){
//定向中断,告诉我们要中断的代码
//在内环*和*外环之外。
断开外环;
}
显示(outerIndex+“:”+innerIndex);
}
}

onclick
已经假定您正在执行JavaScript代码,因此不需要
JavaScript:
伪url。

好的,您在这里定义了一个名为
JavaScript
的跳转标签。你不应该那样做。这对通话没有影响。这是一条路:

onClick="MyMethod();"

区别在于第一个是错误的


第一种方法恰好有效,因为
someidentifier:
恰好是JavaScript中标签的语法,但由于不需要标签,因此没有必要添加它。

这里是一种不引人注目的替代方法。内联JavaScript代码使HTML难以理解。将JavaScript(逻辑)与HTML(表示)分离是一条可行之路。在jQuery中,应该是这样的:

onClick="MyMethod();"
$(function() {
    $('#the-element').click(function() {
        MyMethod();
    });
});

把它放在你的脑子里或者一个外部脚本文件里。最好是在定义了
MyMethod
的地方。现在您的元素是干净的,所有方法调用都位于同一个位置,而不是通过HTML展开。

使用
onClick=“MyMethod();”
。或者更好的办法是,在加载DOM后,删除所有内联javascript,以便分配单击事件。@Stephen:为什么不做一个示例并将其作为解决方案发布呢?好主意!现在属性必须是小写的(至少在xhtml中)。很难改掉一些习惯,但是试着用
onclick
@Kenneth J:这个问题说得很清楚,它吸引了一些详细而准确的答案。此外,这可能是许多初学JavaScript的程序员都遇到过的一个问题。那么问题出在哪里呢?很有趣,因为asp.net可以做到这一点:href=“javascript:uuu doPostBack('ctl00$MainContent$grdTemplate$ctl16$lnkComment',''”)@Krummelz:Microsoft并不以遵守标准而闻名。@Krummelz-href=“javascript:MyMethod();”是正确的。onclick=“javascript:MyMethod();”不是。小心!您需要区分
href
onclick
属性
href
需要
javascript:
伪协议才能知道那是javascript而不是URL
onclick
不需要它,因为onclick只能包含JavaScript而不能包含URL。请注意,ASP.NET示例在链接的HREF属性中使用JavaScript:pseudo URL,而不是在其onclick事件中。这是可行的,但从可访问性的角度来看,这是一个严重的禁忌;使用链接的方法是——首选的方法是让href实际指向另一个可以处理noscript情况的页面。请有人详细说明someidentifier:用法,当我们使用它时。当javascript:为called@sushilbharwani:
javascript:
未被调用。它在javascript中定义了一个跳转标签,在本例中完全没有必要。@sushil:这是一个javascript标签。它几乎没用过。例如:@sushil:除了上面罗托拉提供的优秀参考资料外,我还做了一个小的解释和示例。
$(function() {
    $('#the-element').click(function() {
        MyMethod();
    });
});