未捕获的ReferenceError:在使用字符串时未定义onclick

时间:2015-06-16 20:32:09

标签: javascript jquery ajax onclick

我正在尝试使用以前存储的值将变量传递给onClick函数。我有一个数据库设置,当提供邮政编码时搜索商店位置。例如,在用户搜索邮政编码后,使用ajax调用生成以下链接。返回值“WAFHOH3”是与该特定商店关联的ID:

生成的链接:

<input type="button" onclick="myfunction(WAFHOH1);" value="This Is My Store" data-store-code="WAFHOH3">

基于此代码:

<div class="col-sm-3"><input type="button" onclick="myfunction(' + item.store_code + ');" value="This Is My Store" data-store-code="' + item.store_code + '"></div>

我的问题是,如果返回一个数字以外的任何内容,我会得到一个“未捕获的ReferenceError:未定义WAFHOH3”控制台错误。当一个数字像下面的例子一样传递时,一切正常,我没有错误,应用程序继续按预期工作。

例如(本作品):     

我已尝试手动将字符串更改为数字,以隔离任何与数据库相关的问题。我唯一的猜测是我的代码中有些东西可能试图将输入验证为数字。

以下是ajax调用的完整代码。

完整代码:

function myFunction() {
var searchValue = $('#foobar').val();

if (searchValue.length > 3) {
  var acs_action = 'searchCction';

  $.ajax({
    async: false,
    url: mysearchurl.url+'?action='+acs_action+'&term=' + searchValue,
    type: 'POST',
    data: {
      name: searchValue
    },
    success: function (results) {
      var data = $.parseJSON(results); 

      $('#resContainer').hide();

      var html = '';

      if (data.length > 0) {
        html += '<br/><br/><ul>';
        for (var i = 0; i < data.length; i++) {
          var item = data[i];
          html += '<li>';
          html += '<div class="row myclass">';
          html += '<div class="col-sm-9">';
          html += ' <h3>' + item.label + '</h3>' ;
          html += ' <span>' + item.desc + '</span>';
          html += '</div>'
          html += ' <div class="col-sm-3"><input type="button" onclick="dofunction(' + item.store_code + ');" value="This Is My Store" data-store-code="' + item.store_code + '"></div>';

          html += '</div>';
          html += '</li>';
        }
        html += '</ul><br/><br/><p>This is an example message please email us at <a href="mailto:admin@admin.com">admin@admin.com</a> for assistance.';
      }
      else {
        html += '<br/><br/><p>This is an example message, email us at <a href="mailto:sadmin@admin.com">admin@admin.com</a> for assistance.';
      }

      $('#foo').html(html);
      $('#foo').show();
      $('.foobar').hide();
    }
  });
} else {
  $('#foo').hide();
}
}

感谢任何指导。

1 个答案:

答案 0 :(得分:3)

您需要使用引号包装输入item.store_code;否则,它会尝试将其视为变量,而不是字符串:

html += '<div class="col-sm-3"><input type="button" onclick="noActivationCodeRegistration(\'' + item.store_code + '\');" value="This Is My Store" data-store-code="' + item.store_code + '"></div>';

理想情况下,在为按钮提供类(例如click)之后,您将附加register处理程序:

html += '<div class="col-sm-3"><input type="button" class="register" value="This Is My Store" data-store-code="' + item.store_code + '"></div>';

// Later
$('.register').on('click', function() {
    var storeCode = $(this).data('storeCode');
    noActivationCodeRegistration(storeCode);
});