如何使用下拉菜单更改数据输入掩码前缀

Posted

技术标签:

【中文标题】如何使用下拉菜单更改数据输入掩码前缀【英文标题】:How to change data-inputmask prefix using dropdown 【发布时间】:2021-01-04 11:04:20 【问题描述】:

我使用Robin Herbot inputmask plugin 进行货币输入。每次触发交换下拉更改事件时,我都想更改货币符号。但是 inputmask 前缀阻止更改货币符号。我有这个代码:

html

 @Html.DropDownListFor(model => model.exchange, 
               new SelectList(@ViewBag.rates, "Value", "Text",4), null, new
                       
                           @Style = "height:34px;width:370px !important;font-size: 14px;",
                           @class = "form-control input-lg"
                       
              )
 <input type="text"
                       class="form-control text-left monerate"
                       id="price1"
                       name="price1"
                       placeholder="₺ 0.00"
                       data-inputmask="'alias': 'numeric', 'groupSeparator': ',', 'autoGroup': true, 'digits': 2, 'digitsOptional': false, 'prefix': '₺ ', 'placeholder': '0'" />
  

JQuery:

  $('input.monerate').inputmask();

  $(document.body).delegate('#exchange', 'change', function ()   
        exchangeID = $('#exchange :selected').val();
        if (exchangeID == 1) 
            $("#price1").inputmask( alias: "currency", prefix: '$ ' );           
        
        else if (exchangeID == 2)            
            $("#price1").inputmask( alias: "currency", prefix: '€ ' );
        
        else if (exchangeID == 3)             
            $("#price1").inputmask( alias: "currency", prefix: '£ ' );
        
        else if (exchangeID == 4) 
            $("#price1").inputmask( alias: "currency", prefix: '₺ ' );
                
    );   

有没有办法改变前缀?

我已阅读此答案,但对我不起作用:

Change the currency symbol or remove it in the inputmask currency

小提琴: https://jsfiddle.net/6kzjLd7u/10/

【问题讨论】:

请提供此代码的最小工作示例 @AlwaysHelping 我加了一个小提琴 不幸的是,它不起作用@AlwaysHelping 你能告诉我它不工作的代码吗?您确定您使用的是我在答案中提供的代码吗? @AlwaysHelping 我已经可以获取exchangeID,但问题是,它没有更改占位符“₺”,也没有更改输入框中的前缀.. 【参考方案1】:

您需要像下面这样使用您的on-change 函数。此外,默认情况下选择的valuestring,但您将value 视为integer,这是您的代码不起作用的原因之一。

添加将选项视为整数,我们可以使用unary operator (+) - 在获取值之前添加一个加号将使其成为整数

var exchangeID = +$(this).val(); //parse as number - by default it is string

其次,对于 Robin Herbot inputMask 动态加载并从 dropdown 更改 currency 前缀,您还需要在 jQuery 中分配 initial 前缀。由于您在HTML静态地 定义了它,它将不会按预期工作。

最后,您的代码已全部修复,并且随着货币prefix 在选择时发生变化,可以正常工作。

现场工作演示:

//by default on page load
$("#price1").inputmask(
  alias: "currency",
  prefix: '₺ '
);

//apply prefix on select option change
$(document).on('change', '#exchange', function() 
  var exchangeID = +$(this).val(); //parse as number not - by default is string
  if (exchangeID == 1) 
    $("#price1").inputmask(
      alias: "currency",
      prefix: '$ '
    );
   else if (exchangeID == 2) 
    $("#price1").inputmask(
      alias: "currency",
      prefix: '€ '
    );
   else if (exchangeID == 3) 
    $("#price1").inputmask(
      alias: "currency",
      prefix: '£ '
    );
   else if (exchangeID == 4) 
    $("#price1").inputmask(
      alias: "currency",
      prefix: '₺ '
    );
  
);
input.monerate 
  text-align: left !important;
  width: 300px;


select 
  width: 300px !important;
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled javascript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.2.6/jquery.inputmask.bundle.min.js"></script>

<div style="margin:10px;">
  <label for="exchange">Choose a currency:</label>

  <select name="exchange" id="exchange" class="form-control">
    <option selected disabled>Choose</option>
    <option value="1">USD</option>
    <option value="2">Euro</option>
    <option value="3">Pound</option>
    <option value="4">TL</option>
  </select>
</div>

<div style="margin:10px;">
  <label>Price:</label>
   <input type="text" class="form-control text-left monerate" id="price1" name="price1" placeholder="₺ 0.00" data-inputmask="'alias': 'numeric', 'groupSeparator': ',', 'autoGroup': true, 'digits': 2, 'digitsOptional': false, 'placeholder': '0'" />
</div>

【讨论】:

以上是关于如何使用下拉菜单更改数据输入掩码前缀的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何使用下拉菜单选择图形源?

如何更改操作栏中下拉菜单的背景颜色

如何进行活动菜单文本颜色更改导航下拉项子菜单? [复制]

如何制作 联想动态下拉菜单

Angular 2 选择选项(下拉菜单) - 如何获取更改值以便可以在函数中使用?

我们如何在下拉菜单中更改 Flutter DropdownMenuItem 的宽度/填充?