JavaScript在添加<embed>标签后失去焦点

3

我需要在我的脚本中添加“嘟嘟声”。每次需要发出声音时,我都会添加。

$("#beep").html("<embed src='button-16.wav' hidden='true' autostart='true' loop='false' id='bp' />")

但是当我添加了,后,我的焦点丢失了。
我尝试通过以下方式重新聚焦:
1)
$("#beep").html("<embed src='button-16.wav' hidden='true' autostart='true' loop='false' id='bp' />");
$("#txt").focus();

2)
$("#beep").html("<embed src='button-16.wav' hidden='true' autostart='true' loop='false' id='bp' />");
$("#bp").ready(function(){
    $("#txt").focus(); 
});

但是第一种和第二种方式都不起作用。
HTML代码。
<div id="beep"></div>
<input type="text" id="txt" />

所以,如何在蜂鸣声后保存文本框的焦点?


你应该使用HTML5的<audio>标签来... - ThiefMaster
很不幸,还有很多没有HTML5的旧浏览器... - Sir Hally
近期的浏览器都支持它。让那些使用古老浏览器的人有升级的理由也不错。 - ThiefMaster
2个回答

0
你能否尝试设置一个间隔来查看wav文件的结尾是否正在抓取焦点?
setInterval(function() {
  $("#txt").focus(); 
}, 100);

我只是建议这样做来进行故障排除,而不是作为实际解决方案。可能执行.wav文件所需的时间比运行下一个进程更长,而后者才是你关注的重点。


我尝试了setTimeout(function(){$("#txt").focus();$("#subDebug").append("<p>Message</p>");},5000);。我能听到蜂鸣声,接着文本“Message”出现在div #subDebug中。但是文本框没有再次获得焦点。不幸的是,setInterval也不起作用——它每次都会执行(根据console.log),但是$("#txt").focus();无法将焦点放在文本框上。 - Sir Hally
我已经添加了它。在HTML文件中只有2个标签 - div和input。 - Sir Hally

0
我找到了一种解决这个问题的不同方式。 我编写了一个*.swf文件,当JavaScript调用它的函数时,它会播放一个蜂鸣声。
ActionScript代码。
package  {
import flash.display.*;
import flash.events.*;
import flash.system.*;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.external.ExternalInterface;

public class Main extends Sprite {
    var s:Sound;
    public function Main() 
    {
        ExternalInterface.addCallback("PlaySound", PlaySound);
        var request:URLRequest = new URLRequest("beep.mp3");
        s = new Sound(request);
    }
    public function PlaySound():void
    {
        s.play();
    }
}
}

JavaScript 代码。

$("#txt").keyup(function(event){
    if(event.which==13){
     var obj=thisMovie("Main");
     obj.PlaySound();
    }
});

function thisMovie(movieName) {
var movie;
try
{
    movie = document[movieName];
    movie = (movie == null) ? window[movieName] : movie;        
}
catch (e)
{
    return null;
}
return movie;
}

很重要!此代码仅适用于Web服务器,不适用于本地文件系统。我不知道原因。请参阅http://stackoverflow.com/questions/5337071/externalinterface-addcallback-for-as3-doesnt-work - Sir Hally

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接