【问题标题】:Why jquery selector select element from old value instead of new value为什么jquery选择器从旧值而不是新值中选择元素
【发布时间】:2013-09-05 05:23:57
【问题描述】:

每当我使用带有选择器的 jquery 选择元素时,如果我获得所选元素的值,它会从旧值而不是新值中选择元素,它会给我新值。我的代码在这里http://jsfiddle.net/HUdkN/3/

这里我使用澳大利亚值来选择元素,即使我改变了值。它将选择元素。为什么 ???谁能解释一下。

HTML 代码

    <input type="text" class="lbl" value="Australia" />
    <div id="result"></div>
    <br />
    <br/>
    <input type="button" value="check" id="check_btn">

JAVASCRIPT 代码

    function check_fnc() {
        jQuery('input').removeClass('error');
       jQuery('input[value="Australia"]').each(function () {
           $(this).addClass('error');
            $('#result').html(this.value);
       });
   }

   $('#check_btn').click(function () {
      check_fnc();
   })

【问题讨论】:

    标签: javascript jquery html jquery-selectors selector


    【解决方案1】:

    这是因为Attribute Equals selector(例如[value="Australia"])匹配实际的 HTML 属性,而不是当前的 DOM 属性,并且value HTML 属性将始终包含元素的原始值。

    要匹配当前值,可以改用filter()

    $("input").filter(function() {
        return this.value == "Australia";
    }).each(function() {
        $(this).addClass("error");
        $("#result").html(this.value);
    });
    

    【讨论】:

    • 我明白你在说什么,你能解释一下我如何用你的过滤器选择重复值输入这里是代码jsfiddle.net/HUdkN/6
    • @rajesh,您可以在filter() 中使用lbl_dup_val_arr[k],如jQuery("#combo_tbl_body input").filter(function() { return this.value == lbl_dup_val_arr[k]; }).addClass("error");
    • 感谢您的解决方案。而不是迭代所有字段。有没有其他方法可以用来直接选择具有某些值的所有字段。如果没有,我将实施您的方法
    • @rajesh,我不确定我是否理解您的最后评论。 filter() 确实在内部迭代元素,但仍然允许“一次性”选择具有特定值的所有输入元素。
    【解决方案2】:

    你用这个

    jQuery('input[value="Australia"]') 
    // (") should be remove after (value=) and after Australia
    

    你也可以用这个

    function check_fnc() {
            jQuery('input').removeClass('error');
            //    I eddited here
            jQuery('input[value=Australia]').each(function () {
               $(this).addClass('error');
                $('#result').html(this.value);
           });
       }
    

    希望这会起作用..谢谢

    【讨论】:

      【解决方案3】:

      对于这种情况,您不需要使用任何过滤器。只需删除引号,即使用

        $("input[value=Australia]") .each(...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 2022-10-02
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        相关资源
        最近更新 更多