Javascript 函数不';我没接到电话

Javascript 函数不';我没接到电话,javascript,html,audio,local-storage,Javascript,Html,Audio,Local Storage,我的play()函数未被调用。我真的不知道为什么 我有以下代码: var mp = document.getElementById("mp3"); function play() { mp.play(); console.log("hello"); } function scan() { cordova.plugins.barcodeScanner.scan( function(result) { if (result.text == "home")

我的
play()
函数未被调用。我真的不知道为什么

我有以下代码:

var mp = document.getElementById("mp3");
   function play() {
   mp.play();
   console.log("hello");
}

function scan() {
  cordova.plugins.barcodeScanner.scan(
    function(result) {
      if (result.text == "home") {
        var atHomeRepQR = '<div class="container-h"><div class="card"><div class="item item-text-wrap "><i class="icon ion-unlocked"></i> Diese Ansicht ist entsperrt.</div></div><button onclick="play()" class="button button-positive btn">Play</button></div><audio id="mp3"><source src="video/ping.mp3" type="audio/mpeg"></audio>';
        save("atHomeSaveQR", atHomeRepQR);
      }
      if (result.text == "street") {
        var atStreetRepQR = '<div class="container-s"><div class="card"><div class="item item-text-wrap "><i class="icon ion-unlocked"></i> Diese Ansicht ist entsperrt.</div></div><button onclick="play()" class="button button-positive btn">Play</button></div><audio id="mp3"><source src="video/ping.mp3" type="audio/mpeg"></audio>';
        save("atStreetSaveQR", atStreetRepQR);
      }
      if (result.text == "bern") {
        var atBernRepQR = '<div class="container-b"><div class="card"><div class="item item-text-wrap "><i class="icon ion-unlocked"></i> Diese Ansicht ist entsperrt.</div></div><button onclick="play()" class="button button-positive btn">Play</button></div><audio id="mp3"><source src="video/ping.mp3" type="audio/mpeg"></audio>';
        save("atBernSaveQR", atBernRepQR);
      }
      if (result.text == "bahnhof") {
        var atBahnhofRepQR = '<div class="container-ba"><div class="card"><div class="item item-text-wrap "><i class="icon ion-unlocked"></i> Diese Ansicht ist entsperrt.</div></div><button onclick="play()" class="button button-positive btn">Play</button></div><audio id="mp3"><source src="video/ping.mp3" type="audio/mpeg"></audio>';
        save("atBahnhofSaveQR", atBahnhofRepQR);
      }
      if (result.text == "atelier") {
        var atAtelierRepQR = '<div class="container-at"><div class="card"><div class="item item-text-wrap "><i class="icon ion-unlocked"></i> Diese Ansicht ist entsperrt.</div></div><button onclick="play()" class="button button-positive btn">Play</button></div><audio id="mp3"><source src="video/ping.mp3" type="audio/mpeg"></audio>';
        save("atAtelierSaveQR", atAtelierRepQR);
      }

    },
    function(error) {
      alert("Scanning failed: " + error);
    }
  );
}
var mp=document.getElementById(“mp3”);
函数播放(){
下院议员play();
console.log(“你好”);
}
函数扫描(){
cordova.plugins.barcodeScanner.scan(
功能(结果){
如果(result.text==“home”){
var atHomeRepQR=‘Diese Ansicht ist entsperrt.Play’;
保存(“atHomeSaveQR”,AthomePQR);
}
如果(result.text==“street”){
var atStreetRepQR='Diese Ansicht ist entsperrt.Play';
保存(“ATSTREETSAVQR”,atStreetRepQR);
}
如果(result.text==“伯尔尼”){
var atBernRepQR='Diese Ansicht ist entsperrt.Play';
保存(“atBernSaveQR”,atBernRepQR);
}
如果(result.text==“bahnhof”){
var Atbahnhorefreqr='Diese Ansicht ist entsperrt.Play';
保存(“atBahnhofSaveQR”,atBahnhofRepQR);
}
如果(result.text==“工作室”){
var atAtelierRepQR='Diese Ansicht ist entsperrt.Play';
保存(“atAtelierSaveQR”,atAtelierRepQR);
}
},
函数(错误){
警报(“扫描失败:+错误”);
}
);
}
语法

<button onclick="play()" class="button button-positive btn">Play</button></div><audio id="mp3"><source src="video/ping.mp3" type="audio/mpeg"></audio>
播放
你问我的时候是对的


我的错误是什么?

我必须将
mp
放入函数
play()
中,如下所示:

   function play() {
   var mp = document.getElementById("mp3");
   mp.play();
}

多亏了姆普隆詹

可能是在解析
#mp3
之前初始化了
mp
变量。您应该像这样将任何静态代码包装在
document.ready
块中,以便将其执行延迟到页面加载完成

理想情况下,这可以通过使用jQuery实现:

var mp;
$(document).ready(function() {
    mp = document.getElementById("mp3");
});
如果没有它,这将足以满足大多数现代浏览器(请参阅):


我认为,您的javascript代码在body标记之前。因此,在“mp”元素中没有得到。所以,将javascript代码移动到body标记之后,即呈现html之后。

请检查控制台,是否有任何错误?什么是mp.play();尝试
document.getElementById(“mp3”).play()
-在某些内容存在之前,您不能分配mp=something。打开浏览器,加载包含此代码的页面,打开“开发工具”(F12用于Chrome),查看控制台选项卡,告诉我们您遇到了什么错误。您可以添加代码段或bin吗?@sarath您说得对!我得到了
null
返回。或者将mp定义为一个全局变量,并在加载后分配它。我的道歉,我没有想到在回答之前扩展注释
var mp;
document.addEventListener("DOMContentLoaded", function(event) { 
    mp = document.getElementById("mp3");
});