Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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
Php 合并重复Jquery脚本_Php_Jquery - Fatal编程技术网

Php 合并重复Jquery脚本

Php 合并重复Jquery脚本,php,jquery,Php,Jquery,前言:我把在书堆上能找到的每一个问题都检查了一遍,但都做不到 我有一个悬停脚本,它的功能有点像一个图像库,当你在链接上悬停时,它应该隐藏兄弟图像,并显示与你悬停的链接相关的正确图像 它使用PHP获取所有数据 <section id="callouts" class="clearfix"> <div class="fltLeft span_1_of_2"> <h2>Popular Products</h2>

前言:我把在书堆上能找到的每一个问题都检查了一遍,但都做不到

我有一个悬停脚本,它的功能有点像一个图像库,当你在链接上悬停时,它应该隐藏兄弟图像,并显示与你悬停的链接相关的正确图像

它使用PHP获取所有数据

    <section id="callouts" class="clearfix">
    <div class="fltLeft span_1_of_2">
        <h2>Popular Products</h2>
           <div id="productImages">
              <?php 
                  $counter = 0; 
                $products = get_field('popular_products'); if($products) { foreach ($products as $product) { $counter = $counter + 1; ?>
                <img class="image-<?php echo $counter; ?>" src="<?php echo $product['product_thumbnail'] ?>">       
            <?php }; } ?>
        </div>
        <?php 
            $counter = 0; 
            $products = get_field('popular_products'); if($products) { echo '<ul id="prodList">'; foreach ($products as $product) { $counter = $counter + 1; ?>
            <li class="product-<?php echo $counter; ?>"><?php echo $product['product_name'] ?></li>     
        <?php } echo '</ul>'; } ?>
    </div>
    <div id="shipping" class="fltRight span_1_of_2"></div>
    </section>

这是一个完全站不住脚的方法。我需要帮助重写这篇文章,如果可能的话,还需要一个很棒的解释,说明你做了什么以及为什么。非常感谢你

使用
数据-
元素保存值并泛化函数

<li class="product" data-img='image5'>Business Cards</li>

使用
data-
元素保存值并泛化函数

<li class="product" data-img='image5'>Business Cards</li>

将其转换为循环并不像看上去那么简单,因为我在事件处理程序的上下文中不再可用,所以您必须使用IIFE来创建处理程序函数,同时就地计算i。但你看:

for (var i = 1 ; i <= 7 ; i++ ) {
    $('.product-'+i).hover((function (num) {
        return function () {
            $('.image-'+num).fadeIn("fast");
            $('.image-'+num).siblings().hide();
        };
    })(i))
}

for(var i=1;i将其转换为循环并不像它看起来那么简单,因为我在事件处理程序的上下文中不再可用,所以您必须使用iLife在原地计算i时创建处理程序函数。但是,这样做:

for (var i = 1 ; i <= 7 ; i++ ) {
    $('.product-'+i).hover((function (num) {
        return function () {
            $('.image-'+num).fadeIn("fast");
            $('.image-'+num).siblings().hide();
        };
    })(i))
}


用于(var i=1;i重复之间的唯一区别是字符串中的数字后缀,您可以通过循环和
'string'+i
而不是
string1
string2
等实现自动化。在任何情况下,这都应该移到。这个问题似乎与主题无关,因为我听说过循环,但是我想知道我是否需要计数器?堆栈上这类问题的许多答案都没有这个。他们只是删除它并在脚本中使用类或数据属性…这就是为什么我没有成功地找到解决方案。重复之间的唯一区别是字符串中的数字后缀,您可以忽略它使用循环和
'string'+i
而不是
string1
string2
等进行自动操作。在任何情况下,这个问题都应该移到。这个问题似乎与主题无关,因为它是关于我听说过循环的,但我正在试图弄清楚我是否甚至需要计数器?关于堆栈上这类问题的许多答案都没有他的。他们只是删除它并在脚本中使用类或数据属性…这就是为什么我没有成功找到解决方案。尝试了这个,但仍然有问题。设置一个小提琴:你在图像上使用class=“image-7”,但“image1”在您的数据元素中。它们必须匹配。好的,我在更改类后也使用了此选项。谢谢!尝试了此选项,但仍然有问题。设置小提琴:您在图像上使用class=“image-7”,但“image1”在您的数据元素中。它们必须匹配。好的,我在更改类后也可以这样做。谢谢!我首先尝试了这个解决方案,因为这根本不需要我更改PHP,所以我无法让它工作。还有其他想法吗?我在上面发布了一个JSFIDLE,其中包含旧代码,但是如果您能提供帮助,请随意使用它/调整。谢谢!获得了一个我的解决方案有y个错误?在事件处理程序中尝试了
alert()
ing
num
,以查看a)处理程序是否注册,b)num是否获得正确的值?因为我可能在那里犯了一个错误;)我现在正在打电话,所以现在无法对自己进行jsFiddle,抱歉。我确实收到了此错误:TypeError:$(…)。悬停(…)不是一个函数})(i);是的!就是这样。你觉得这是最有效的方法吗?这个def工作正常,比我以前使用的更干净。它显然不是最干净的方式,因为它仍然涉及到使用所有这些类——这些类通常只对样式有意义,而不是存储数据。但是,如果您不想接触PHP代码,它不会变得更短。如果你想获得最小的性能,那么就不要使用jQuery,而使用普通的JS——它可能只需要执行时间的一半,但通常只有几毫秒,我想这没什么大不了的。我首先尝试了这个解决方案,因为这根本不需要我更改PHP,而且我无法让它工作。还有其他想法吗?我在上面发布了一个带有旧代码的JSFIDLE,但是如果您能提供帮助,请随意使用它/调整。谢谢我的解决方案有错误吗?已尝试在事件处理程序中设置
alert()
ing
num
,以查看a)处理程序是否已注册,b)num是否已获得正确的值因为我可能犯了个错误;)我现在正在打电话,所以我现在不可能自己打电话,对不起。我确实收到了这个错误:TypeError:$(…)。hover(…)不是函数})(I);是的!就是这样。你觉得这是最有效的方法吗?这个def工作正常,比我以前使用的更干净。它显然不是最干净的方式,因为它仍然涉及到使用所有这些类——这些类通常只对样式有意义,而不是存储数据。但是,如果您不想接触PHP代码,它不会变得更短。如果您想获得最小的性能,那么就不要使用jQuery,而是使用普通的JS——它可能只需要执行时间的一半,但通常只有几毫秒,我想这不会有多大影响。
for (var i = 1 ; i <= 7 ; i++ ) {
    $('.product-'+i).hover((function (num) {
        return function () {
            $('.image-'+num).fadeIn("fast");
            $('.image-'+num).siblings().hide();
        };
    })(i))
}