Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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
Firefox上的jQuery/JavaScript-event.target.id_Javascript_Jquery_Events_Firefox_Google Chrome - Fatal编程技术网

Firefox上的jQuery/JavaScript-event.target.id

Firefox上的jQuery/JavaScript-event.target.id,javascript,jquery,events,firefox,google-chrome,Javascript,Jquery,Events,Firefox,Google Chrome,我写了一个简短的脚本,在Chrome上运行良好: function updateSentence(){ $(document).ready(function() { t = event.target.id; $("#S"+t).html($("#"+t).val()); }); } 但是,在Firefox中没有定义事件。我发现了一些类似的问题,这些问题表明需要将事件作为参数传递给函数: function updateSentence(event)

我写了一个简短的脚本,在Chrome上运行良好:

function updateSentence(){
    $(document).ready(function() {
        t = event.target.id;
        $("#S"+t).html($("#"+t).val());
    });
}
但是,在Firefox中没有定义事件。我发现了一些类似的问题,这些问题表明需要将事件作为参数传递给函数:

function updateSentence(event){
    $(document).ready(function(event) {
        t = event.target.id;
        $("#S"+t).html($("#"+t).val());
    });
}
然而,对我来说,这个解决方案并没有解决Firefox的问题,它实际上破坏了它在Chrome中的工作方式。在Chrome中,它最后说当传递这些事件时,
event.target
没有定义

我做错了什么

在收到一些评论后,我意识到我对jQuery的总体想法是错误的。我不想要
$(文档)。ready
每次更新句子都会调用。利用这些知识清理函数,我最终得到了:

function updateSentence(){
    t = event.target.id;
    $("#S"+t).html($("#"+t).val());
}
这仍然正确地更新了Chrome中的句子,但是Firefox中仍然没有定义
target
。我需要做些什么才能让它在Firefox中正常工作?我还在jQuery中做一些根本错误的事情吗

另外,为了回答评论中的一个问题,我要查找的事件是触发
updatecontence()
onchange
事件。当选择/文本字段更改时,应调用此选项

(总的来说,我还是新手,我肯定我只是犯了一个简单的错误。)



我找到了答案。如果网站允许的话,我会在几个小时后发布。

在考虑了上述评论中提到的内容并仔细阅读了我正在做的事情之后,我找到了问题的答案。首先,我错误地使用了
$(document).ready
调用函数。接下来,我对ID如何传递给函数的理解似乎不正确。它似乎不是自动传递的,而是必须手动传递。因此,我最初的困惑是,为什么其他评论者被我的问题弄糊涂了。在任何情况下,知道这些事情后,我从另外两个被回答的问题中找到了答案。可以在以下两个堆栈溢出问题中找到它们:


我肯定我在这个解释中还说了一些别的错误,但我很快就会了解更多。

是的,非常好。如果你重新思考你是如何做到这一点的,那就更有意义了。 把你的绑定和你的功能分开,这就是你所做工作的一半

$(function() { // Equivalent of Document Ready; You only need this once; 
  // BINDINGS HERE
  $('someSelector').on('change keypress', function(event) {
    updateSentence(this);
  });
});

function updateSentence(elem) {
  $('#S' + elem.id).html( elem.value ) ; 
}
而且,这是我建议不要使用辅助函数的情况之一。在某些情况下,您想做的事情非常简单,除了在绑定上做的事情之外,很难证明有一个函数可以调用

$(function() { 
  $('someSelector').on('change keypress', function(event) {
    $('#S' + this.id).html( this.value ) ; 
  });
});
您将注意到,在这两种情况下,都不需要
事件
。但是,即使对于FF,它也是可用的,因为它将作为n参数传入(
函数(事件)


在FF代码中未定义“目标”的原因是FF不会像大多数浏览器那样从空中抓取
事件。因此,如果您无法设置代码以消除对
事件的需要,或者无法像我的示例中那样传递它,您可以通过
window.event
引用它

你期望目标是什么<代码>$(文档).ready
将jQuery本身作为参数发送-没有目标元素。我不认为在另一个函数中运行(文档).ready是个好主意。它应该运行一次,在“就绪”页上。如果在该事件之后调用它,它将不会按您希望的方式运行。您使用的“然而在Firefox中”表明,在其他浏览器中,您从某处获得了结果。你真的不应该这样。不是用那个脚本。啊,看来我的问题是我对JQuery基础知识的理解。我将首先了解我的函数是如何设置的。谢谢大家!@golmschenk-你能根据调用的时间和原因发布更多的代码/html吗?在您的更新中有
事件
,但没有定义它。这是从哪里来的?如何调用
updateContent
?不,您似乎看不到事件是如何传播的。事件气泡具有属性,其中一个是目标。目标可能有一个id(它可能无法设置/寻址)。但目标是从何而来的事件问题。因此,target.id是可以找到元素id的地方。但您的问题并没有正确地了解事件(请参阅我的答案,了解如何a:您可以忽略引用事件的需要,或b:如果您确实希望通过事件通过目标获取id,则将事件传递给FF,以便FF直接看到它或通过window.event访问事件