2012-07-05 46 views
-1

我目前有代码为jQuery的链接。点击选定的链接时,会打开对话框。

$('.dialog_link_add').click(function(){ 
    var row_id = $(this).parent().parent().attr('id'); 
    return false; 
} 

因为对话总是让窗口滚动到顶部(在Internet Explorer),我已经使用纯JavaScript和实现方法老FASION方式找到解决这个。

onclick="function_call(this);return false;" 

...但它不工作。我现在怎么发送“this”参数等于jQuery $(this)?

+0

直接回答你的问题,'的onclick = “FUNCTION_CALL($(本));返回false;”',但为了更好的解决方案,请参阅TJCrowder的答案。 – Matt 2012-07-05 09:45:23

+1

-1用于稍后更新问题并在7分钟后提及您在IE中只有该问题 – Blaster 2012-07-05 09:50:26

回答

5

您实际询问的问题的答案是:$(this)的原始等价物是this,但是以您给定的onclick的形式,它将成为您传递给函数的参数。您可以继续,如果你想使用jQuery在功能,只需接受元素作为参数(因为这是你如何通过它),然后就可以使用$()

function function_call(elm) { 
    var row_id = $(elm).parent().parent().attr('id'); 
    // ... 
} 

不过要完全原始DOM ::

function function_call(elm) { 
    var row_id = elm.parentNode.parentNode.id; 
} 

更在各种DOM规范和HTML5 API:

:您可以防止滚动你的jQuery版本,以同样的方式:

$('.dialog_link_add').click(function(){ 
    var row_id = $(this).parent().parent().attr('id'); 
    return false; // <<============= 
}); 

在jQuery的处理程序,return false做了两件事:

  1. 防止默认操作(所以在#形式的链接的情况下,它不会滚动窗口)。

  2. 防止事件冒泡DOM。

在DOM0式处理器(您onclick),return false阻止默认动作,但不停止冒泡。 More about return false in various types of handlers(编辑后的问题显示了jQuery的处理程序,最初并不是有没有return false。)

+0

我更新了问题。问题仅在IE – Ales 2012-07-05 09:46:57

+1

@Ales:这很不幸,请在第一次尝试时正确解释您的问题(因为其他人正在给您的问题留出重要时间)。现在他将不得不修改或重写他的答案,尽管+1 – Blaster 2012-07-05 09:48:53

+1

@Ales:我分开意识到我没有真正回答你问的问题,所以我这样做了。但我没有看到IE浏览器会使用您提供的代码进行滚动的任何原因。要做的更有用的事情是找出*为什么会发生并处理根本原因。 – 2012-07-05 09:52:29