Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数调用了两次_Javascript - Fatal编程技术网

javascript函数调用了两次

javascript函数调用了两次,javascript,Javascript,我现在感到困惑和沮丧,来到这里寻求一些启示 我正在使用这个js函数: jQuery('#elements_hidden .vign').on('click', function(e) { var valid = '/img/site/valid.png'; var unvalid = '/img/site/unvalid.png'; var anchor = jQuery(this).next('.valid'); var an

我现在感到困惑和沮丧,来到这里寻求一些启示

我正在使用这个js函数:

jQuery('#elements_hidden .vign').on('click', function(e)
{
    var valid        = '/img/site/valid.png';
    var unvalid      = '/img/site/unvalid.png';
    var anchor       = jQuery(this).next('.valid');
    var anchor_block = jQuery(this);
    var list         = jQuery(this).parents('li').parents('ul').children('li');
    var state        = anchor.attr('src');

    console.log('state:' + state);

    jQuery(list).each(function(index, val)
    {
        jQuery(val).children('.valid').attr('src',unvalid);
        jQuery(val).children('.vign').attr('src',jQuery(val).children('.vign').attr('src').replace('on.png','off.png'));
    });

    if (anchor.attr('src') == unvalid)
    {
        anchor.attr('src',valid);
        anchor.siblings('.vign').attr('src', anchor.siblings('.vign').attr('src').replace('off.png','on.png'));

        if(state != unvalid)
        {
            anchor.attr('src',unvalid);
            anchor.siblings('.vign').attr('src',anchor.siblings('.vign').attr('src').replace('on.png','off.png'));
        }

    }
});
在这段标记上:

<!-- html markup -->
<div id="elements_hidden" style="z-index: 0">

<div class="moteur">
    <ul id="moteur">
            <li>
                <img data-optionCode="12" class="vign" src="/img/site/vign/vign_off.png" />
                <img class="valid" src="/img/site/unvalid.png" />
            </li>
            <li>
                <img data-optionCode="2T" class="vign" src="/img/site/vign/vign_off.png" />
                <img class="valid" src="/img/site/unvalid.png" />
            </li>
            <li>
                <img data-optionCode="4T" class="vign" src="/img/site/vign/vign_off.png" />
                <img class="valid" src="/img/site/unvalid.png" />
            </li>
    </ul>
</div>

<div class="couleur">
        <ul id="couleur">
            <li>
                <img data-optionCode="0MP50NP5" class="vign" src="/img/site/vign/vign_off.png" />
                <img class="valid" src="/img/site/unvalid.png" />
            </li>
            <li>
                <img data-optionCode="0MP60NP6" class="vign" src="/img/site/vign/vign_off.png" />
                <img class="valid" src="/img/site/unvalid.png" />
            </li>
        </ul>
</div>

<div class="selle">
    <ul>
        <li><img class="vign" src="/img/site/vign/vign_off.png" /><img class="valid" src="/img/site/unvalid.png" /></li>
    </ul>
</div>

<div class="jonc">
    <ul>
        <li><img class="vign" src="/img/site/vign/vign_off.png" /><img class="valid" src="/img/site/unvalid.png" /></li>
    </ul>
</div>

<div class="retros">
    <ul>
        <li><img class="vign" src="/img/site/vign/vign_off.png" /><img class="valid" src="/img/site/unvalid.png" /></li>
    </ul>
</div>

<div class="signature">
    <ul>
        <li><img class="vign" src="/img/site/vign/vign_off.png" /><img class="valid" src="/img/site/unvalid.png" /></li>
    </ul>
</div>

<div class="rangement">
    <ul id="rangement">
            <ul>
                <li>
                    <img data-optionCode="DAKP7" class="vign" src="/img/site/vign/vign_off.png" />
                    <img class="valid" src="/img/site/unvalid.png" />
                </li>
                <li>
                    <img data-optionCode="DAKR1" class="vign" src="/img/site/vign/vign_off.png" />
                    <img class="valid" src="/img/site/unvalid.png" />
                </li>
            </ul>
            <ul>
                <li>
                    <img data-optionCode="DLU01" class="vign" src="/img/site/vign/vign_off.png" />
                    <img class="valid" src="/img/site/unvalid.png" />
                </li>
            </ul>
            <ul>
                <li>
                    <img data-optionCode="DPQ01" class="vign" src="/img/site/vign/vign_off.png" />
                    <img class="valid" src="/img/site/unvalid.png" />
                </li>
            </ul>

    </ul>
</div>

<div class="confort">
    <ul>
        <li><img class="vign" src="/img/site/vign/vign_off.png" /><img class="valid" src="/img/site/unvalid.png" /></li>
    </ul>
</div>

<div class="perso">
    <ul>
        <li><img class="vign" src="/img/site/vign/vign_off.png" /><img class="valid" src="/img/site/unvalid.png" /></li>
    </ul>
</div>

</div>

按照这个解释,如果我能很好地理解的话,它不必被触发两次,但它确实被触发了。所以我仍然感到困惑。

我认为,你看到的是由两种不同元素触发的事件。你有一个img,它的class
vign
被包装在一个div中,class
#elements\u隐藏
。因此,如果单击内部元素而不阻止事件冒泡,它最终将冒泡到外部元素。由于在jquery查询中使用了这两个类,因此单击处理程序将附加到这两个类


此SO问题的解释:

元素是否相互重叠?我不知道,因为我没有CSS或输出。你能创建一个小提琴吗?我并没有完全理解你的问题,但有可能你已经把点击处理程序的代码注册了两次。。。
<img id="moteur_vignette" data-optionCode="<?php echo $optionCode ?>" class="vign" src="<?php echo $this->basePath()?>/img/site/vign/vign_off.png" />
jQuery('#moteur_vignette').on('click', function(e) {
... 
}