如何将jQuery选择对象传递到被选择调用的函数
How do I pass the jQuery selection object into a function being called by the selection?
jQuery新手,我不知道该怎么说
当下面的函数在jquery选择范围内时,它可以正常工作。当我试图打破函数时,我不确定需要将什么对象/变量传递到函数中才能使函数工作。
//function included in selection works great
$('#id1 tbody tr').find('td:eq(2)').text(
function(i,t){
return Math.round((parseInt(t,10) / 60)*100)/100;
});
//function broken out returns NaN in HTML
$('#id2 tbody tr').find('td:eq(2)').text(minutesToHours());
function minutesToHours(i,t){
return Math.round((parseInt(t,10) / 60)*100)/100;
}
这是相同的函数,但在HTML中返回'NaN'。我知道我需要将对象传递到函数minutesToHours()
中,但我尝试过的this
或$(this)
都不起作用。minutesToHours('whatGoes','here')
JSFiddle
我想这与上下文有关,但我不明白。
HTML例子
<table id="id1">
<tbody>
<tr>
<td>John</td>
<td>2</td>
<td>800</td>
<td>4</td>
</tr>
<tr>
<td>Sally</td>
<td>5</td>
<td>610</td>
<td>9</td>
</tr>
<tr>
<td>Bob</td>
<td>7</td>
<td>249</td>
<td>3</td>
</tr>
</tbody>
</table>
<table id="id2" style="margin-top:1em;">
<tbody>
<tr>
<td>John</td>
<td>2</td>
<td>800</td>
<td>4</td>
</tr>
<tr>
<td>Sally</td>
<td>5</td>
<td>610</td>
<td>9</td>
</tr>
<tr>
<td>Bob</td>
<td>7</td>
<td>249</td>
<td>3</td>
</tr>
</tbody>
</table>
结果Included function
John 2 13.33 4
Sally 5 10.17 9
Bob 7 4.15 3
Broken out function
John 2 NaN 4
Sally 5 NaN 9
Bob 7 NaN 3
谢谢你的帮助!
进一步解释Adeno在评论中的回答:
From the docs:
。Text (function)
函数Type: Function(Integer index, String text) => String返回要设置的文本内容的函数。接收元素在集合中的索引位置和旧文本值作为参数。
这意味着当你调用下面的代码时,t
被填充旧的文本值:
$('#id1 tbody tr').find('td:eq(2)').text( function(i,t){
return Math.round((parseInt(t,10) / 60)*100)/100;
});
然而,当你在下面使用minutesToHours()
时,你实际上是在调用minutesToHours()
,没有参数,并将返回值传递给.text()
。因为你没有传递任何变量给函数,t
是未定义的,函数产生NaN
:
$('#id2 tbody tr').find('td:eq(2)').text(minutesToHours());
function minutesToHours(i,t){
return Math.round((parseInt(t,10) / 60)*100)/100;
}
和.text()
使用不同的签名:
。Text (Text)
文本类型:字符串、数字或布尔值要设置为每个匹配元素的内容的文本。当提供Number或Boolean时,它将被转换为String表示形式。
按照Adeno的建议,从minutesToHours()
中删除()
,如下所示。现在,您将对minutesToHours
函数的引用传递给.text()
,而不是调用函数。当.text()
看到形参是一个函数时,它将在该上下文中调用该函数,传递两个值(index, text )
和一切正常:
$('#id2 tbody tr').find('td:eq(2)').text(minutesToHours);
function minutesToHours(i,t){
return Math.round((parseInt(t,10) / 60)*100)/100;
}
- 选择值,然后只调用函数
- 如何在页面加载angular js上设置从ajax调用中选择的选项
- 从Document调用onchange函数.已准备好从更新中预先选择的项目
- Jquery-如何获取插件调用的选择器
- 从Bootstrap Dropdown中选择后调用javascript
- jQuery选择ajax调用中附加的元素不起作用
- 如何在从下拉列表中选择不同的值后更新和调用javascript函数
- 从下拉列表中选择多个值并调用javaScript函数
- 如何调用更改事件,例如在 HTML 数据列表上选择
- 调用函数单击选择标签中的选项
- 如何在文件打开和调用图像区域选择时获取原始图像大小
- 在选择标记中的更改不调用函数
- 更改调用函数时选择框的选项值
- 通过类选择器单独调用方法
- 用于确定 AJAX 调用的引导选项卡选择
- jQuery选择调用AJAX的元素
- 基于下拉选择调用函数
- 如何将jQuery选择对象传递到被选择调用的函数
- 自动完成选择:调用另一个函数
- 选择.调用是否真的返回 d3 中的选择