.click在桌面上执行了两次

时间:2013-05-30 01:04:35

标签: javascript jquery html

你好我有这个html结构:

<div id="media1368131383" data-date="1368131383" class="gauche media" style="">
    <table>
        <tbody>
            <tr>
                <td valign="top" style="vertical-align:top !important;padding-right:7px;">
                    <a href="http://www.mupiz.com/johnwatsonmusic" target="_blank">
                        <img src="http://www.mupiz.com/37038/picture?type=square" width="44">
                    </a>
                </td>
                <td class="dcom vidCustomD" style="width:450px">
                    <a href="http://www.mupiz.com/johnwatsonmusic" target="_blank">John, Watson</a> a ajouté une nouvelle chanson
                    <br>
                    <a href="http://www.mupiz.com/johnwatsonmusic/dans-un-roman">«Dans un roman»</a>
                    <br>
                    <span class="media_date gris petit">il y a environ 20 jours</span>
                </td>
                <td align="right">
                    <div class="playerMedia" data-url="http://www.mupiz.com/mp3/37038/mp3_87526.mp3" data-id="mp3_87526.mp3">Dans un roman</div>
                </td>
            </tr>
        </tbody>
    </table>
    <br>
</div>

我已经附加了一个事件点击.playerMedia,但它被执行了两次。但是当.playerMedia不在桌面上时,它会执行一次,

Js(完美的工作)

function InlinePlayer() {
    $(".playerMedia").each(function () {
        var nom = $(this).attr("data-id");
        nom = soundManager.createSound({
            id: $(this).attr("data-id"),
            url: $(this).attr("data-url")
        });
        $(this).live('click', function (e) {

            if (!$(this).hasClass("sm2_playing")) {

                nom.play();
                $(this).addClass("sm2_playing");
            } else {
                $(this).removeClass("sm2_playing");
            }


            debug("1 time");
            e.stopPropagation();
            return false;
        });
    });
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的InlinePlayer功能正常运行。最可能的问题是你将它调用两次而不是一次,将点击处理程序连接两次。最好的解决方案是不要多次调用InlinePlayer(),但使用全局变量的快速而肮脏的解决方案如下所示。

// global boolean that determines if InlinePlayer has already been called:
var inlinePlayerCalled = false;

/*
 * your code...
 */

function InlinePlayer() {
 // check if InlinePlayer has already been called
 // if it has not, then mark it as called.
if(inlinePlayerCalled) {
    inlinePlayerCalled = true;
    return false;
}
   ...
}