首页 文章

从循环中传递javascript函数中的变量

提问于
浏览
0

有必要在循环中将变量传递给函数 . 单击按钮时,id(或对象)应该属于该函数 .

$.each(data, function (index,subcatObj) {
                        if(subcatObj.didOrganizer==0){
                            y.innerHTML="<input type=\"button\" onclick=\"return makeDid(subcatObj);\" value=\"Назначить куратором1\">"
                        }
                        else {
                            y.innerHTML="<input type=\"button\" onclick=\"return deleteDid(subcatObj);\" value=\"Снять куратора\">"
                        }  


            function makeDid(item) {
                console.log(item)
            }
            function deleteDid(item) {
                console.log(item)
            }      
              })

但是发生错误:

未定义subcatObj

怎么解决?

1 回答

  • 0

    显式创建 input 元素(而不仅仅是在HTML字符串中),然后在其上使用 addEventListener (或赋予其 onclick 属性)以便在闭包中捕获 subcatObj ,因此变量可以在处理程序中使用:

    function makeDid(item) {
      console.log(item)
    }
    function deleteDid(item) {
      console.log(item)
    }
    
    $.each(data, function(index, subcatObj) {
      // next line not needed if y is empty already:
      y.innerHTML = '';
      const input = y.appendChild(document.createElement('input'));
      input.type = 'button';
      // best to use strict equality if possible:
      if (subcatObj.didOrganizer === 0) {
        input.value = 'Назначить куратором1';
        input.addEventListener('click', () => makeDid(subcatObj));
      } else {
        input.value = 'Снять куратора';
        input.addEventListener('click', () => deleteDid(subcatObj));
      }
    });
    

    (HTML中的onclick属性通常很难管理,并且通常被认为是非常差的练习)

相关问题