Firefox上的jQuery/JavaScript-event.target.id
我写了一个简短的脚本,在Chrome上运行良好: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)
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访问事件