0

嗨,我得到了这个 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;
        });
    });
}

有任何想法吗 ?

4

1 回答 1

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;
}
   ...
}
于 2013-05-30T01:49:20.667 回答