pas-s-rseInt() 的问题[关闭]

Posted

技术标签:

【中文标题】pas-s-rseInt() 的问题[关闭]【英文标题】:Problems with pasrseInt() [closed] 【发布时间】:2021-11-06 23:50:36 【问题描述】:

当我尝试将数字传递给我的函数参数时,我似乎无法弄清楚为什么 parseInt() 在我的代码中无法正常工作。它似乎在我的数组和函数返回值中不断出现 NaN。

我想要做的是当值被键入输入字段时,这两个值的索引百分比出现在 html 中并将值存储在数组中。我为此使用了一个函数,因为我想要进行 20 多个出口计算。我也在努力重构这段代码,因为我没有太多的 JS 经验。任何帮助将不胜感激。 这是我的 HTML。

function outletIndex(actual, design) 
    
    let result1 = actual / design * 100;
    var indexArray = [];
    indexArray.push(result1);
    console.log(indexArray, result1);
    if (!isNaN(result1)) 
    document.getElementById("percentage").textContent = `$result1.toFixed(1)%`;
    
  

  const x = parseInt(document.getElementById("outlet_actual_1" ).valueAsNumber);
  const y = parseInt(document.getElementById("outlet_design_1").valueAsNumber);
  
  const outlet1Index = outletIndex(x, y);
 <table>
      <tr>
        <div class="form-group row 1" id="outlets1">
          <td><label
            >Outlet Design</label>
            <input
              name = "outlet 1 design"
              class="form-control design_1"
              id="outlet_design_1"
              type="number"
              placeholder="Outlet 1 Design"
              
            />
          </td>
          <td><label
            >Outlet Actual</label>
            <input
            name="outlet 1 actual"
              class="form-control actual_1"
              id="outlet_actual_1"
              type="number"
              placeholder="Outlet 1 Actual"
              onblur="outletIndex();"
            />
          </td>
          <td><label
            >Outlet Balance</label>
            <input
              name="outlet_balance"
              class="form-control"
              input value=""
              id="outlet_balance_1"
              type="text" 
              placeholder="Outlet 1 Balance"        
            />
          </td><td>
            <div class="proportion" id="percentage">

            </div>
          </td>
        </div>
      </tr>

【问题讨论】:

&lt;input&gt; 元素没有任何内容。您正在寻找 .value 属性。 另外,将基数传递给parseInt 以确保它正确转换字符串。 请使用parseIntwith the second parameter, 10。考虑改用NumberparseFloat,或者专门针对&lt;input&gt;s,.valueAsNumber。您已经拥有&lt;input type="number"&gt;,因此只需获取document.getElementById("outlet_actual_1").valueAsNumber等即可。 好的 - 我会试试的! 好的,所以我尝试了 .valueAsNumber 和 Number(document.getElementById("outlet_actual_1").valueAsNumber; 【参考方案1】:

这里的主要问题是读取xy 的代码运行之前其中任何值。

第二个问题是当您 blur 带有 id outlet_actual_1 的控件调用您的方法时,但没有参数,当它期望 actualdesign 作为参数传入时。

最后,如果使用valueAsNumber,则无需使用parseInt。如果您确实想使用它,请阅读value 并确保使用parseInt(document.getElementById("outlet_actual_1" ).value, 10) 之类的基数

实现这一点的简单方法是将读取 xy 的代码移入方法中并删除参数,但可能不止这些,我怀疑你想随时重新计算 任何一个字段都发生了变化,所以让我们也添加一下:

function outletIndex() 
    const actual = document.getElementById("outlet_actual_1" ).valueAsNumber || 0 ;
    const design = document.getElementById("outlet_design_1").valueAsNumber || 0 ;
    let result1 = actual / design * 100;
    var indexArray = [];
    indexArray.push(result1);
    console.log(indexArray, result1);
    if (!isNaN(result1)) 
    document.getElementById("percentage").textContent = `$result1.toFixed(1)%`;
    
  
<table>
      <tr>
        <div class="form-group row 1" id="outlets1">
          <td><label
            >Outlet Design</label>
            <input
              name = "outlet 1 design"
              class="form-control design_1"
              id="outlet_design_1"
              type="number"
              placeholder="Outlet 1 Design"
              onblur="outletIndex();"
            />
          </td>
          <td><label
            >Outlet Actual</label>
            <input
            name="outlet 1 actual"
              class="form-control actual_1"
              id="outlet_actual_1"
              type="number"
              placeholder="Outlet 1 Actual"
              onblur="outletIndex();"
            />
          </td>
          <td><label
            >Outlet Balance</label>
            <input
              name="outlet_balance"
              class="form-control"
              input value=""
              id="outlet_balance_1"
              type="text" 
              placeholder="Outlet 1 Balance"        
            />
          </td><td>
            <div class="proportion" id="percentage">

            </div>
          </td>
        </div>
      </tr>

可以对您的代码进行许多进一步的改进,我会从阅读 addEventListener 开始,而不是使用像 onblur 这样的内联事件处理程序

【讨论】:

以上是关于pas-s-rseInt() 的问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

怎么用键盘关闭网页?

关闭套接字会关闭流吗?

Excel提示:遇到问题需要关闭怎么处理

在关闭连接之前关闭阅读器

easyui window 关闭问题

vb用sendmessage关闭程序的问题。。