2013-07-04 122 views
1

我试图在点击一个链接时调用一个javascript函数。其实我希望提交使用POST方法,所以我尝试做如下─javascript函数被调用两次

<a href="javascript:submitCategory(this)" >Handicrafts</a> 

,并在javascript

function submitCategory(varthis) 
{ 
    alert(varthis.value); 
} 

我有几个重要的问题,点击一个链接形式: 1>我点击链接函数submitCategory被调用两次。经过多次分析发现,我有两个js文件包含,并删除其中的一个使该函数只被调用一次。 当我已经包括意

<script type ="text/javascript" src="jquery.js"></script> 
    <script type ="text/javascript" src="cWed.js"></script> 

submitCategory函数被调用两次

,当我删除其中的一个,包括

<script type ="text/javascript" src="jquery.js"></script> 

submitCategory函数被调用一次。

这是为什么?

2> alert(thisvar.value)应返回Handicrafts,但返回undefined。为什么会这样呢?

3> href =“javascript:submitCategory(this)”的含义究竟是什么?我在任何教程中都没有遇到过这个问题。并且在这里包括这个应该引用元素“a”的权利?

+0

_ “包括这这里应该指的是元素 ”a“ 是吗?” _是的,这是正确的。什么是'cWed.js'? –

+0

请不要在'href'属性中使用JavaScript,而应使用适当的'onclick'事件处理。 – Teemu

回答

0

1.您不需要使用限定“的javascript:”
2.当你在钩HTML时,总是试图做到像event_handler(event)。注意:事件是事件对象。而不是一些随机变量。您可以在网络上的许多地方阅读更多内容。在你的情况下,varthis是事件对象。访问此元素使用varthis.target,然后获取其内部的HTML,你可以使用varthis.target.innerHTML
3.当函数被调用时,你必须显式获取调用元素的HTML内容通过事件标记,或者只是使用jQuery。你不能以你现在传递的方式传递变量。
4.如果您确实想要提交表单,我会建议将脚本中的onSubmit事件挂钩到HTML中,并将您的自定义表单提交代码。如果您不需要在表单提交中进行任何自定义操作,则可以将目标服务器功能的url放在表单的action属性中。

示例代码:

<form> 
    <a href="#" id="submitCategoryLink">Submit Category</a> 
</form> 
<script type="text/javascript"> 
    $('#submitCategoryLink').on('click', function (e) { 
     alert(e.target.innerHTML) 
    }); 
</script> 
+0

当你在'href'中放置脚本时,你**需要使用'javascript:'限定符。 'onclick'不需要它。 – Barmar

+0

谢谢巴尔马尔。回答了一个问题 – ebdo

+0

hey codetantrik 实际上,我将这个指针传递给事件处理程序,所以它实际上是指向元素的指针,并且与event.target相同。所以我不需要做varthis.target.innerHTML,并且实际上它不会工作,如果我这样做。 关于您的替代解决方案,其实际上并不是我拥有的一个链接属性。我有二十左右,动态可能会添加,所以我需要这个属性。 – ebdo

0
  1. 因为我们还没有发布的cWed.js内容就很难知道为什么你得到重复提交,但我的猜测是,它包含了click处理器它自己的,这是复制默认处理程序。

  2. 原因varthis.value不起作用的,因为.value仅用于<input><select>元素,它包含了用户输入或从菜单中选择的值。要获取元素的文本内容,您应该使用.innerHTML

  3. javascript:开头的URI意味着浏览器应该在该前缀后执行Javascript代码,而不是从网络位置获取页面。这不是一个官方认可的URI方案(有一个Internet草案RFC,但它在2年前过期),但所有浏览器都支持它。

  4. 当代码从javascript: URI执行时,this是窗口,而不是被点击的元素。您需要使用onclick处理程序将this设置为该元素。

以下工作:

<a href="javascript:void(0)" onclick="submitCategory(this); return false;" >Handicrafts</a> 

function submitCategory(varthis) 
{ 
    alert(varthis.innerHTML); 
} 

FIDDLE

+0

嗨barmar 感谢您的帮助。然而,即使对于tagName,innerHTML,nodeValue它也没有工作 – ebdo