javascript - 使用 javascript 构建带有输入复选框的 html 输出

标签 javascript jquery ajax

我正在构建一个字符串,该字符串将以语法方式放置在 div 程序中。我试图调用输入复选框的 onclick 属性,但遇到了一些麻烦。我试图在每次单击复选框时传递一个唯一值 id。下面的代码是我正在使用的。请参阅下面的问题:

var count = 1;
$.each(JSON.parse(data.d), function (k, v) {
    var searchName = v.searchName;
    resultString += "<div class='row form-group'>";
    resultString += "<div class='col-sm-1 right-content'><input type='checkbox' onclick = 'authorCheckboxclick(this)' id='" + searchName + "'></div>";
    resultString += "<div class='col-sm-11'>";
    resultString += "<span>";
    //resultString +=  v.text   
    resultString += count + ". " + v.text
    resultString += "</span>";
    resultString += "<br />";
    resultString += "<span>";
    //resultString += "Consectetur adipisicing, Consequatur, 2015.";
    resultString += "</span>";
    resultString += "</div>";
    resultString += "</div>";
    //resultString += "<br><br>";
    count++;
});

authorCheckboxclick 函数中,如果我输入 var answerid = $(this).attr('id'); 我会得到未定义的结果。

function authorCheckboxclick(elem) {
    var answerid = $(this).attr('id');
    alert(answerid);  //I get undefined
    var answerid = $(this).attr(elem.id);
    alert(answerid); //I get undefined
    var answerid = $(this).attr(elem.id);
    alert(answerid); //I get undefined
    var searchTerm = elem.id;
    alert(searchTerm); //I get proper value
    searchTerm = searchTerm.substring(0, 3);
    alert(searchTerm); //I get proper value
    var answerid = $(this).attr(elem.id);
    alert(answerid); //I get undefined


    var search = searchTerm.toUpperCase();
    var array = jQuery.grep(dataMembers, function (value) {
        return value.toUpperCase().indexOf(search) >= 0;
    });

是否有原因导致我的 jQuery 调用无法正常工作而我的 JavaScript 却正常工作?是否有将 id 值发送到结点的最佳实践?我要把苹果和橙子混合在一起吗?哪种方法显示速度更快?

最佳答案

解决问题的直接方法是在函数中使用 this 关键字。当您从 on* 属性调用该函数时,该函数的范围将是 window,而不是引发事件的元素。要解决此问题,只需使用您在参数中提供的元素即可,即。 $(elem) 而不是 $(this)

更好的解决方案是使用一个不显眼的委托(delegate)事件处理程序,它可以在您尝试时利用 this 关键字。它还具有留下更干净的 HTML 代码和更好地分离关注点的好处。试试这个:

var count = 1;
$.each(JSON.parse(data.d), function(k, v) {
  var searchName = v.searchName;
  resultString += '<div class="row form-group">' +
    '<div class="col-sm-1 right-content"><input type="checkbox" id="' + searchName + '"></div>' +
      '<div class="col-sm-11">' +
        '<span>' + count + ". " + v.text + '</span><br />' +
        '<span></span>' +
      '</div>' +
    '</div>';
  count++;
});

$(document).on('change', '.row :checkbox', function() {
  var answerid = this.id;
  var search = searchTerm.toUpperCase();
  var array = jQuery.grep(dataMembers, function(value) {
    return value.toUpperCase().indexOf(search) >= 0;
  });
});

关于javascript - 使用 javascript 构建带有输入复选框的 html 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681542/

相关文章:

javascript - 使用 JavaScript 显示/隐藏多个 div

javascript - 在 Ajax 调用中获取解析器错误

javascript - 使 Div 从特定位置展开到 View 中

javascript - Ember.js ajax POST 请求未通过 Mirage

javascript - 如何使用 jqGrid 发送凭据?

javascript - SuiteCRM 内联编辑字段未保存

javascript - IE 中使用 ES6 箭头函数的语法错误

javascript - Javascript中的addEventListener自动触发点击事件

javascript - 将鼠标悬停在 Google Charts 中的栏上时禁用悬停效果

jquery - 如何在jquery中选择最近添加的元素?