2016-01-25 349 views
3

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

语法

<button onclick="play()" class="button button-positive btn">Play</button></div><audio id="mp3"><source src="video/ping.mp3" type="audio/mpeg"></audio> 

是正确的,当你问我。

我的错误是什么?

+1

请检查控制台,是否有任何错误?什么是mp.play(); – saikumar

+0

尝试'document.getElementById(“mp3”)。play()' - 你不能在事物存在之前指定mp = something。 – mplungjan

+2

打开浏览器,加载包含此代码的页面,打开“开发工具”(F12 for Chrome),查看控制台选项卡,并告诉我们您遇到了什么错误。 – Pierre

回答

1

在分析#mp3之前,您的mp变量可能正在初始化。你应该在document.ready块中包装这样的静态代码,以便它的执行延迟到页面加载完成。

理想的情况下,这将是使用jQuery实现:

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

在它的缺席,这将足以满足大多数现代浏览器(见this answer):

var mp; 
document.addEventListener("DOMContentLoaded", function(event) { 
    mp = document.getElementById("mp3"); 
}); 
+0

我已经评论过,在你回答前10分钟 – mplungjan

+0

我的歉意,我没有想到在回答之前扩大评论 – MTCoster

0

我只好就地mp到函数play()这样的:

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

感谢mplungjan!

+0

或将mp定义为全局变量,并在加载后指定它 – mplungjan

0

我想,你的JavaScript代码身体标记之前。因此'mp'元素没有得到。所以移动你的JavaScript代码后身体标记,即呈现你的HTML。