this.value不在jquery中工作?

时间:2013-09-18 17:01:26

标签: javascript jquery

这是javascript中的工作示例

Demo

在这里我把它和(this.value)无法正常工作

$(document).ready(function() { 

 $('#submit').bind("click",function() 
    { 
        var imgVal = $('#file').val();
        var imgName = $('#image_n').val(); 
        var imgDes = $('#image_description').val(); 

        var all_select = document.getElementsByTagName("select");
        for (i = 0; i < all_select.length; i++) {
        all_select[i].onchange = function () {
        alert(this.value);
        }
        }

知道问题是什么或如何解决? BTW(这个)看起来没有颜色,你可以在这里看到

2 个答案:

答案 0 :(得分:1)

this的值在闭包内发生变化。

$(document).ready(function() { 

  $('#submit').bind("click",function() 
  { 
    var submitButton = $(this); // <-- The call here refers to the #submit click
    var imgVal = $('#file').val();
    var imgName = $('#image_n').val(); 
    var imgDes = $('#image_description').val(); 

    var all_select = document.getElementsByTagName("select");
    for (i = 0; i < all_select.length; i++) {
      all_select[i].onchange = function () {
         var selectElement = $(this); // <-- The call here refers to the select change
         alert(submitButton.val()); // <-- What do you mean to alert?
      }
    }
  }
}

答案 1 :(得分:1)

在您的代码中,您将onchange事件处理程序绑定在“bind submit”处理程序中,因此在该提交事件触发之前不会添加它。我建议将它移到其他地方之外:

$(document).ready(function () {
    $('#submit').on("click", function () {
        var imgVal = $('#file').val();
        var imgName = $('#image_n').val();
        var imgDes = $('#image_description').val();
    });
    $("select").on('change', function () {
        alert(this.value);
    });
});

注意:如果由于某种原因你喜欢你的语法,你仍然可以这样使用:

$(document).ready(function () {
    $('#submit').on("click", function () {
        var imgVal = $('#file').val();
        var imgName = $('#image_n').val();
        var imgDes = $('#image_description').val();
    });

    var all_select = document.getElementsByTagName("select");
    for (i = 0; i < all_select.length; i++) {
        all_select[i].onchange = function () {
            alert(this.value);
        };
    }
});