Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当脚本代码更改文本时,返回用于输入的javascript堆栈跟踪_Javascript_Html_Tags_Find - Fatal编程技术网

当脚本代码更改文本时,返回用于输入的javascript堆栈跟踪

当脚本代码更改文本时,返回用于输入的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

我想知道如何找出哪个Javascript文件正在更改页面上输入的文本

例如,我有一个带有文本输入的页面和5个包含的javascript文件,但我不知道哪一个正在更改文本输入的值

我尝试过使用change事件,但当文本被另一个脚本更改时,不会触发该事件

1.js文件:

<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
});