2012-02-12 41 views
6

我需要一个明确的方法来找出什么样的Javascript正在修改表单值?我已经能够做的最好的是:有没有什么方法可以追溯到一个javascript函数调用?

$(function(){ 
    console.log($("input[name=Email]").val()); 
}); 

但是这个值没有被执行的点改变。

+1

这是用于调试?如果是这样的话,可以使用浏览器开发工具来设置一个断点并逐步执行代码? – 2012-02-12 15:49:24

+0

这将在dom加载时执行..是你想要的? – 2012-02-12 15:50:29

+0

这不是我的代码,或者至少我无法找到它在数百行中的位置。如果我将我的jQuery版本从1.3.2(网站当前所在的版本)更改为1.7.1,则输入开始发生更改。 – 2012-02-12 15:52:09

回答

9

有一个新的方式在Chrome和Firefox做到这一点:console.trace

在这里看到:

https://developer.mozilla.org/en-US/docs/Web/API/console.trace

在网页监制人:

> console.trace() 
console.trace() VM251:2 
(anonymous function) VM251:2 
InjectedScript._evaluateOn VM223:581 
InjectedScript._evaluateAndWrap VM223:540 
InjectedScript.evaluate VM223:459 
undefined 

所以修改接受的答案:

$('input#myInputAbove').change(function(){ 
    console.trace(); // No breakpoint needed anymore. 
}); 
-1
prev_value = document.getElementByName('Email').value; 

$("input[name=Email]").change(function(){ 
    var cur_value = document.getElementById('Email').value; 
    if(cur_value != prev_value){ 
     alert("Value changed"); 
    //or console.log("Value changed"); 
    } 
} 
+0

我需要一种方法来找出_what_正在修改该值,而不是它正在被修改。 – 2012-02-12 16:05:46

+1

@BenDauphinee当我只是想帮助你时,即使我对你不了解,它也很难-1。你可以不接受我的回答 – ParPar 2012-02-12 16:12:22

+3

我没有使用downvote作为个人攻击。在这个指导范围内,可以降低对这个问题不正确的答案。请参阅http://meta.stackexchange.com/a/112664 – 2012-02-12 16:34:19

2

插入此直接下面你要跟踪的表单元素的HTML:

$('input#myInputAbove').change(function(){ 
    console.log('change detected'); // Breakpoint on this line 
}); 

使用Firebug插入breakpoint到上述JS方法。打它,看看堆栈跟踪。

1

下面将告诉你什么是事件处理程序已绑定到一个元素:

$.each($("input[name='Email']").data('events'), function(i, event){ 
    $.each(event, function(i, handler){ 
     console.log(handler.handler); 
    }); 
}); 
+0

对不起,不是'.fn',而是'.handler' – osahyoun 2012-02-12 16:18:04

相关问题