如何在JQuery函数之外获取“ this”变量?

时间:2018-08-23 12:11:43

标签: jquery variables

我正在尝试在rate_value之外获取名称为#rate_country的var。因此,在#ch_rate函数中,此var应该具有相同的值。

simdConvertTransform:toNode:

我该怎么做?

<script>
var rate_default = 50;
var rate_value = ''; // this doesn't work

$('#rate_country').change(function(){
  var rate_input = $('#ch_rate').val();
  var rate_country = $(this).val();
  if (rate_country == 'AD') {
    var rate_value = rate_default * 2;
    if (rate_value > rate_input) {
      $('#rate_validity').addClass('validity_w');
      $('#ch_rate').addClass('i_wrong')
    } else {
      $('#rate_validity').removeClass('validity_w');
      $('#ch_rate').removeClass('i_wrong')
    }
  } else if (rate_country == 'AG') {
    var rate_value = rate_default * 5;
  }
});

// so the rate_value should be 250 if rate_country == AG or 100 if rate_country == AD

$('#ch_rate').keyup(function(){
  let $this = $(this);
  var rate_input = $(this).val();
  var rate_regexp = /^((0|[1-9]\d*)(\.\d+)?)?$/;
  if (rate_value > rate_input || !rate_regexp.test(rate_input)) {
    $('#rate_validity').addClass('validity_w');
    $('#ch_rate').addClass('i_wrong')
  } else {
    $('#rate_validity').removeClass('validity_w');
    $('#ch_rate').removeClass('i_wrong')
  }
});
</script>

2 个答案:

答案 0 :(得分:1)

使用var rate_value全局声明一次rate_value,然后将其称为rate_value。如果再次使用var rate_value,它将被覆盖。

var rate_default = 50;
var rate_value = ''; // Define rate_value once here

$('#rate_country').change(function(){
    var rate_input = $('#ch_rate').val();
    var rate_country = $(this).val();
    if (rate_country == 'AD') {
        rate_value = rate_default * 2;  //DO NOT USE var here, just change the value of rate_value
        if (rate_value > rate_input) {
          $('#rate_validity').addClass('validity_w');
          $('#ch_rate').addClass('i_wrong')
        } else {
          $('#rate_validity').removeClass('validity_w');
          $('#ch_rate').removeClass('i_wrong')
        }
    } else if (rate_country == 'AG') {
        rate_value = rate_default * 5;  //DO NOT USE var here, just change the value of rate_value
    }

    console.log("rate_value is now: " + rate_value);  //See what rate_value is now
});

// so the rate_value  should be rate_default * 5 if rate_country == AG

$('#ch_rate').keyup(function(){
    console.log("rate_value is now: " + rate_value);  //See what rate_value is now

    let $this = $(this);
    var rate_input = $(this).val();
    var rate_regexp = /^((0|[1-9]\d*)(\.\d+)?)?$/;

    if (rate_value > rate_input || !rate_regexp.test(rate_input)) {
        $('#rate_validity').addClass('validity_w');
        $('#ch_rate').addClass('i_wrong')
    } else {
        $('#rate_validity').removeClass('validity_w');
        $('#ch_rate').removeClass('i_wrong')
    }
});

请记住,var定义变量并设置初始值。每次使用var都会重置该值,因此仅使用var一次(除非您确实要重置。)

答案 1 :(得分:0)

您可以使用全局变量或隐藏参数,然后再获取其他函数