为什么在回调中传递的值返回未定义?

萨默·沙克(SameerShaik)

在这里,我试图像在jquery中那样编写自定义的每个方法,为此在每个函数中,我检查对象是否与数组相似,是否像数组一样,我运行循环并通过在每个函数中发送参数来调用回调函数。在每个函数中,我都会获取正确的值,但在回调中,它们将返回未定义的值。

var obj = document.getElementsByTagName('input');

var isArrayLike = function(obj){
	if(typeof obj.length === "number"){
		if(obj.length===0){
			return true;			
		}
		else if(obj.length>=0){
			return (obj.length)-1 in obj;	
		}
	}
	return false;
}

function cb(ob,ik){
//here value of ob is returning as 2 and id as undefined
    console.log(ob)
	console.log(ik)
	if(document.getElementById(ik).checked){
		 console.log(ik)
	}	
}

function each (obj,cb) {
	if(isArrayLike(obj)){
		for(var i=0;i<obj.length;i++){
			var id = obj[i].getAttribute('id');
			cb.call(obj,id)
		}
	}
}

each(obj,cb)

阿伦·P·约翰尼(Arun P Johny)

问题是,call()传递给obj和时id,的第一个参数call将作为this回调中的值传递,第二个参数将作为第一个参数的值传递,依此类推。因此,在您的情况下,obj将传递为的值,thisid传递作为的值ob,因此ik由于未传递任何值,因此变得不确定。

一种解决方案是使用this引用回调中的当前元素,另一种解决方案是obj[i]as作为this值和第一个参数传递

cb.call(obj[i], obj[i], id)

由于您将dom对象本身传递给了回调,因此无需传递id

var obj = document.getElementsByTagName('input');

var isArrayLike = function(obj) {
  if (typeof obj.length === "number") {
    if (obj.length === 0) {
      return true;
    } else if (obj.length >= 0) {
      return (obj.length) - 1 in obj;
    }
  }
  return false;
}

function cb(ob) {
  //here value of ob is returning as 2 and id as undefined
  console.log(ob, this)
  if (ob.checked) {
    snippet.log(ob.id)
  }
}

function each(obj, cb) {
  if (isArrayLike(obj)) {
    for (var i = 0; i < obj.length; i++) {
      cb.call(obj[i], obj[i])
    }
  }
}

function testit() {
  each(obj, cb)
}
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
<input type="checkbox" id="1" />
<input type="checkbox" id="2" />

<button onclick="testit()">Test</button>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么回调未定义?

来自分类Dev

传递回Angular中的回调的数据未定义

来自分类Dev

“this”在wepay回调关闭器中返回未定义

来自分类Dev

为什么在Rails模型回调中出现此“未定义方法”错误,将该方法作为符号传递?

来自分类Dev

为什么在Rails模型回调中出现此“未定义方法”错误,将该方法作为符号传递?

来自分类Dev

'this'在指令的回调中未定义

来自分类Dev

为什么从“ findLocation()”返回值未定义的promise?

来自分类Dev

JavaScript和Node.JS-无法理解为什么回调中的变量未定义

来自分类Dev

为什么返回值在我的递归函数中变得未定义?

来自分类Dev

为什么我在 Firebase 中收到此错误“函数返回未定义、预期的承诺或值”

来自分类Dev

为什么我在尝试访问通过 ajax 返回的 json 数据中的值时未定义

来自分类Dev

为什么我的回调函数收到未定义的参数值?

来自分类Dev

为什么innerHTML在angularjs中返回未定义的

来自分类Dev

为什么我的变量在javascript中返回未定义?

来自分类Dev

为什么Cookie中的数据返回未定义状态?

来自分类Dev

Meteor.call回调函数返回未定义

来自分类Dev

承诺将未定义的结果返回给回调

来自分类Dev

在Javascript中,为什么未定义对象的子键返回错误而不是未定义?

来自分类Dev

为什么innerHTML返回“未定义”?

来自分类Dev

为什么返回未定义状态?

来自分类Dev

为什么函数返回未定义?

来自分类Dev

为什么 .forEach 返回未定义?

来自分类Dev

$ .getJSON在IE9及以下版本中返回未定义的成功回调

来自分类Dev

在get请求中调用时,回调返回未定义的

来自分类Dev

在get请求中调用时,回调返回未定义的

来自分类Dev

流星集合findOne在回调中返回时未定义

来自分类Dev

尝试从数据库中回显值时,为什么会出现错误(通知:未定义的索引)?

来自分类Dev

为什么从提供者未传递任何值时,react-context返回未定义,而不是返回默认值?

来自分类Dev

在回调方法中未定义RequireJS依赖项

Related 相关文章

  1. 1

    为什么回调未定义?

  2. 2

    传递回Angular中的回调的数据未定义

  3. 3

    “this”在wepay回调关闭器中返回未定义

  4. 4

    为什么在Rails模型回调中出现此“未定义方法”错误,将该方法作为符号传递?

  5. 5

    为什么在Rails模型回调中出现此“未定义方法”错误,将该方法作为符号传递?

  6. 6

    'this'在指令的回调中未定义

  7. 7

    为什么从“ findLocation()”返回值未定义的promise?

  8. 8

    JavaScript和Node.JS-无法理解为什么回调中的变量未定义

  9. 9

    为什么返回值在我的递归函数中变得未定义?

  10. 10

    为什么我在 Firebase 中收到此错误“函数返回未定义、预期的承诺或值”

  11. 11

    为什么我在尝试访问通过 ajax 返回的 json 数据中的值时未定义

  12. 12

    为什么我的回调函数收到未定义的参数值?

  13. 13

    为什么innerHTML在angularjs中返回未定义的

  14. 14

    为什么我的变量在javascript中返回未定义?

  15. 15

    为什么Cookie中的数据返回未定义状态?

  16. 16

    Meteor.call回调函数返回未定义

  17. 17

    承诺将未定义的结果返回给回调

  18. 18

    在Javascript中,为什么未定义对象的子键返回错误而不是未定义?

  19. 19

    为什么innerHTML返回“未定义”?

  20. 20

    为什么返回未定义状态?

  21. 21

    为什么函数返回未定义?

  22. 22

    为什么 .forEach 返回未定义?

  23. 23

    $ .getJSON在IE9及以下版本中返回未定义的成功回调

  24. 24

    在get请求中调用时,回调返回未定义的

  25. 25

    在get请求中调用时,回调返回未定义的

  26. 26

    流星集合findOne在回调中返回时未定义

  27. 27

    尝试从数据库中回显值时,为什么会出现错误(通知:未定义的索引)?

  28. 28

    为什么从提供者未传递任何值时,react-context返回未定义,而不是返回默认值?

  29. 29

    在回调方法中未定义RequireJS依赖项

热门标签

归档