当脚本代码更改文本时,返回用于输入的javascript堆栈跟踪
我想知道如何找出哪个Javascript文件正在更改页面上输入的文本 例如,我有一个带有文本输入的页面和5个包含的javascript文件,但我不知道哪一个正在更改文本输入的值 我尝试过使用change事件,但当文本被另一个脚本更改时,不会触发该事件 1.js文件:当脚本代码更改文本时,返回用于输入的javascript堆栈跟踪,javascript,html,tags,find,Javascript,Html,Tags,Find,我想知道如何找出哪个Javascript文件正在更改页面上输入的文本 例如,我有一个带有文本输入的页面和5个包含的javascript文件,但我不知道哪一个正在更改文本输入的值 我尝试过使用change事件,但当文本被另一个脚本更改时,不会触发该事件 1.js文件: <script> $(".MySection").children().children().eq(3).val("Text Changed!") </script> $(“.MySection”).c
<script>
$(".MySection").children().children().eq(3).val("Text Changed!")
</script>
$(“.MySection”).children().children().eq(3).val(“文本已更改!”)
2.js文件:
<script>
$(".MySection").children().children().eq(3).val("Text Changed!")
</script>
$(“.MySection”).children().children().eq(3).val(“文本已更改!”)
在您的示例代码中,它将用于处理html中最后包含的文件
例如,如果在html中使用两次,则最后一次将起作用:
<script>
$(".MySection").children().children().eq(3).val("Text Changed!")
</script>
<script>
$(".MySection").children().children().eq(3).val("This would work!")
</script>
</body>
$(“.MySection”).children().children().eq(3).val(“文本已更改!”)
$(“.MySection”).children().children().eq(3).val(“这会有用的!”)
在javascript文件的第一行添加以下内容:
alert('Javascript file X');
非常基本,但应该有效简而言之,你不能。您需要的是javascript堆栈跟踪 堆栈跟踪很容易强制/生成,如下所示:
$("#myText").change(function(){
var e = new Error('dummy');
var stack = e.stack.replace(/^[^\(]+?[\n$]/gm, '')
.replace(/^\s+at\s+/gm, '')
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
.split('\n');
console.log(stack);
});
});
这是无法避免的,因为您根本无法拦截事件。即使您注册/绑定到propertychanged、change、input、keydown、paste、DOMSubtreeModified事件,它也不会工作,因为这些事件都不会响应输入文本值的动态更新
$("#myText").bind("propertychanged, change, input, keydown, paste, DOMSubtreeModified", function(event){
// call stack trace here, except these bindings WONT be fired whenever the val is set dynamically
});
您可能会沿着以下路径前进:
但它们不会帮助您,因为它们不会观察单个控件属性,而只是观察与DOM相关的更改。i、 e.添加和删除节点等。它们不允许您在输入中注册文本更改事件
我所能说的是,如果你有一个你无法控制的网页,也就是说,你被淘汰了,那么我认为你应该认真重新考虑设计。不幸的是,javascript代码不在HTML文件中,它们在JS文件中单独工作。此外,您的代码将打印第二个,因为它是控制文本框的最新javascript。但我不知道哪个在工作。不幸的是,所有JavaCScript都在加载,我想知道哪个文件(或javascript>的哪一行)在工作。我真的不明白,你说5个javascript文件控制文本框,但你不知道哪一个在工作?
$("#myText").bind("propertychanged, change, input, keydown, paste, DOMSubtreeModified", function(event){
// call stack trace here, except these bindings WONT be fired whenever the val is set dynamically
});
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var observer = new MutationObserver(function(mutations, observer) {
// fired when a mutation occurs
console.log(mutations);
// ...
});
var n = $("#myText").get(0);
// define what element should be observed by the observer
// and what types of mutations trigger the callback
observer.observe(n, {
subtree: true,
attributes: true,
childList: true,
characterData: true,
attributeOldValue: true,
characterDataOldValue: true
});