【问题标题】:jQuery Tabs - jquery script only works for 1st tab - bad initialize?jQuery 选项卡 - jquery 脚本仅适用于第一个选项卡 - 初始化错误?
【发布时间】:2011-04-23 18:54:57
【问题描述】:

我有 jQuery 选项卡,其中每个选项卡和相应的内容都由 PHP foreach 循环填充。

对于每个标签,用户可以上传一张图片。我有这样的设置,一旦用户选择了一个文件,一个 jquery 脚本就会自动开始上传——浏览按钮被隐藏并替换为“上传你的图片”。

这里是代码(CI 标记):

<ul class="tab_header">
    <?php foreach ($p as $row):
        echo '<li>
            <a href="#tabs-'. $row->p_id . '">' . $row->p_name . '</a>
               </li>'; 
        endforeach; ?>
</ul>
<?php foreach ($p as $row): ?>
    <div id="tabs-<?php echo $row->p_id; ?>">

        <?php echo form_open_multipart('/p/p_upload_picture/' . $row->p_id, 'id="upload_form"');
        echo form_upload('userfile', '', 'id="file_select"');
        echo form_hidden('upload','upload');
        echo form_close(); ?>
         <div id="loading" style="display:none;">
            Uploading your picture...
         </div>     
</div>

<?php endforeach; ?>

<script>
$(function(){
    $("#file_select").change(function(){
        $("#upload_form").submit();
        $("#upload_form_div").hide();
        $("#loading").show();
    });
});
</script>   

这非常有效,但仅在第一个选项卡上。

在所有其他选项卡中,jquery 脚本不会运行——只要我选择了一个文件,文件名就会显示在浏览按钮字段中,并且不会进行上传(未提交表单)。

我想知道这是否与没有为其他选项卡初始化的脚本有关。

我该如何解决这个问题?

感谢您的帮助,非常感谢。

【问题讨论】:

  • 正如@Kevin 所说,在页面上重复使用相同的“id”值会导致问题。

标签: php javascript jquery tabs initialization


【解决方案1】:

您的字段有一个 id。哪个should be unique per element

jQuery 只返回它遇到的具有给定 id 的第一个元素,这就是你的代码不起作用的原因。我建议在您的字段中添加一个类而不是 id。

$('.class-of-field')..change(function() {
    ..
});

以上内容应该可以完成。

这将是没有 jQuery 的等效代码:

var el = document.getElementById('file_select');

只返回一个元素,看看documentation

【讨论】:

  • awesome @kevin,效果很好——我分心了,因为我已经从另一个没有重复元素的应用程序中移植了它——顺便说一句,我的 JS 脚本中的所有其他元素也需要是类,否则它仍然不知道我指的是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多