jQuery - 如何将'this'传递给函数?

时间:2017-03-31 15:11:30

标签: javascript jquery

如何将$(this)传递给函数。在下面的示例中,我想使用所选下拉选项标签的值填充地址文本框,但前提是所选值不为空。

以下不起作用?

$("#AddressId").change(function () {
  $("#Address").val(function(index, val) {
      val = $(this).val();
      return val === "" ? "" : $('option:selected', this).text();
  }, this).trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id="AddressId">
 <option value="">-- Please select --</option>
 <option value="1">xyz street</option>
 ...
</select>

<input id="Address" name="Address" value="" type="text">

3 个答案:

答案 0 :(得分:0)

要实现此目的,请在this事件处理程序的变量中#AddressId引用change。然后,您可以在内部val()函数中使用该变量,如下所示:

$("#AddressId").change(function() {
  var $addressId = $(this);
  
  $("#Address").val(function(index, val) {
    val = $addressId.val();
    return val === "" ? "" : $('option:selected', $addressId).text();
  }, this).trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="AddressId">
   <option value="">-- Please select --</option>
   <option value="1">xyz street</option>
 </select>

<input id="Address" name="Address" value="" type="text">

虽然请注意,您提供给val()的功能不是必需的,并且是导致问题的原因。您可以将代码简化为:

$("#AddressId").change(function() {
  var address = $(this).val() ? $(this).find('option:selected').text() : '';      
  $("#Address").val(address).trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="AddressId">
   <option value="">-- Please select --</option>
   <option value="1">xyz street</option>
 </select>

<input id="Address" name="Address" value="" type="text">

答案 1 :(得分:0)

我打赌你刚刚过度复杂化了。

$("#AddressId").change(function() {
  if ($(this).val()) {
    $('#Address').val($(this).find('option:selected').text());
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="AddressId">
   <option value="">-- Please select --</option>
   <option value="1">xyz street</option>
   ...
 </select>

<input id="Address" name="Address" value="" type="text">

答案 2 :(得分:0)

您只需添加条件selected_value != "",然后分配所选值(如果不为空):

$("#AddressId").change(function () {
    var selected_value = $(this).val();

    if( selected_value != ""){
        $("#Address").val( selected_value );
   }
});

希望这有帮助。

$("#AddressId").change(function () {
  var selected_value = $(this).val();

  if( selected_value != ""){
      $("#Address").val( selected_value );
  } 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id="AddressId">
 <option value="">-- Please select --</option>
 <option value="1">xyz street</option>
 <option value="2">abc street</option>
 <option value="3">def street</option>
</select>

<input id="Address" name="Address" value="" type="text">