在页面上查找以前的元素

时间:2014-10-09 08:22:52

标签: jquery

<div class="row">
    <label for="cv1">Upload your CV</label>
    <div class="row-holder">
        <input type="file" name="ctl00$main$rptJobs$ctl02$fileuploadcv" id="ctl00_main_rptJobs_ctl02_fileuploadcv" class="updatename" style="display:none;" />
        <input name="ctl00$main$rptJobs$ctl02$fucv1" type="text" id="ctl00_main_rptJobs_ctl02_fucv1" class="upload" />
        <label id="ctl00_main_rptJobs_ctl02_fucvlabel" class="uploadbtn" for="ctl00_main_rptJobs_ctl02_fileuploadcv">BROWSE</label>                                                    
    </div>
</div>
<div class="row">
    <label for="letter1">Upload letter of application</label>
    <div class="row-holder">
        <input type="file" name="ctl00$main$rptJobs$ctl02$fileuploadcl" id="ctl00_main_rptJobs_ctl02_fileuploadcl" class="updatename" style="display:none;" />
        <input name="ctl00$main$rptJobs$ctl02$fucl1" type="text" id="ctl00_main_rptJobs_ctl02_fucl1" class="upload" />
        <label id="ctl00_main_rptJobs_ctl02_fucllabel" class="uploadbtn" for="ctl00_main_rptJobs_ctl02_fileuploadcl">BROWSE</label>
    </div>
</div>
<div class="row">
    <div class="row-holder">                                                    
        <input type="submit" name="ctl00$main$rptJobs$ctl02$btnSubmit" value="Send" id="ctl00_main_rptJobs_ctl02_btnSubmit" class="jqueryvalidate" />
    </div>
</div>

让我们从HTML开始:

请注意,这是来自转发器的DOM示例。我试图验证文件上载量是否为空。这是班级&#34;上传&#34;必须包含值。 input class="upload"具有由转发器创建的动态ID,因此只能由它的类引用。

$(document).ready(function() {
    $('input.jqueryvalidate').click(function() {
        var tempcv;
        var tempcl;
        tempcv = $(this).prev().prev().prev().find(".upload");
        return false;
    });
});

我已尝试.prev().parent().find() but always get未定义。任何人都可以发现我的错误吗?

7 个答案:

答案 0 :(得分:2)

您可以使用.closest().siblings()执行此操作:

Fiddle

tempcv = $(this).closest('.row').siblings().find(".upload");

答案 1 :(得分:0)

您可能想尝试使用Closest。这会向后遍历树,直到找到您正在寻找的元素。然后回到上传。

或者,尝试为每行上传创建唯一的类名。

即。类似的东西:

&lt; asp:button CssClass =&#34; submit_button_&lt;%#Eval(&#34; recordId&#34;)%&gt;&#34; RUNAT =&#34;服务器&#34;&GT;

答案 2 :(得分:0)

只是一个猜测,我建议尝试下面的代码,这将返回上传的集合。 像Mozilla的firebug这样的浏览器开发工具将在控制台中提供很多帮助,或者通过在js代码中设置断点,您可以找到详细信息。

 $(document).ready(function() {
        $('input.jqueryvalidate').click(function() {
            var tempcv;
            var tempcl;
            tempcv = $('.row').find(".upload");
            return false;
        });
    });

希望这有帮助。

答案 3 :(得分:0)

$(document).ready(function() {
    $('input.jqueryvalidate').click(function() {
        var tempcv;
        var tempcl;
        tempcv = $(this).closest(".row").siblings(".row").find(".upload");
        tempcv.each(function(){
            alert(this.id)

        });

        //return false;
    });
});

DEMO

答案 4 :(得分:0)

如果您要验证所有.upload元素:

$(document).ready(function() {
    $('input.jqueryvalidate').click(function() {
        var $uploads = $('.row .upload');
        var valid = true;
        $uploads.each(function () {
            if (!this.value) {
                valid = false;
                return false;
            }
        });
        return valid;
    });
});

答案 5 :(得分:0)

$(document).ready(function () {
        $('input.jqueryvalidate').click(function () {
            $temp = $('div.row').find(".upload");
            $temp.each(function () {
                // do something here
            });
            return false;
        });
    });

答案 6 :(得分:0)

你是missundersand .prev(),上一个是兄弟姐妹。您想要使用的是.parent()

正如我在评论和AsciiSmoke中所说的那样,使用.closest()会使得它更具有可维护性,因为你更少依赖于DOM hierarchie

$(this).closest('.row').siblings('.row').find('.upload')
  • .closest(&#39; .row&#39;)查找点击输入的父行
  • .siblings(&#39; .row&#39;)查找上一行的所有兄弟姐妹行
  • .find(&#39; .upload&#39;)查找之前找到的行集中的所有.upload。