我不知道这个!为什么这个Javascript函数会给出未定义的错误?

时间:2014-10-22 16:07:58

标签: javascript ruby-on-rails

我正在尝试使用sweet-alert覆盖Rails默认确认对话框。下面是源JavaScript文件,但我遇到了一个我似乎无法弄清楚的错误。

它返回以下错误:

 Uncaught TypeError: Cannot read property 'handleMethod' of undefined 

我认为$linkToVerify未定义,但我不确定如何解决这个问题。有人可以帮忙吗?

(function( $ ) {
  var sweetAlertConfirm = function(event) {
    swalDefaultOptions = {
      title: 'Are you sure?',
      type: 'warning',
      showCancelButton: true,
      confirmButtonColor: "#DD6B55",
      confirmButtonText: "Ok"
    }

    //this.click(function(event) {
    $linkToVerify = $(this)
    var swalOptions = swalDefaultOptions;
    var optionKeys = [
                       'confirm',
                       'text',
                       'type',
                       'showCancelButton',
                       'confirmButtonColor',
                       'cancelButtonColor',
                       'confirmButtonText',
                       'cancelButtonText',
                       'closeOnConfirm',
                       'imageUrl',
                       'allowOutsideClick',
                       'remote',
                       'method'
                     ]

    $.each($linkToVerify.data(), function(key, val) {
      if ($.inArray(key, optionKeys) >= 0) {
        swalOptions[key] = val
      }
    })

    message = $linkToVerify.attr('data-sweet-alert-confirm')
    swalOptions['title'] = message
    swal(swalOptions, function(r) {
      if (swalOptions['remote'] === true) { 
        $.rails.handleRemote($linkToVerify)
      }
      else if(swalOptions[ 'method' ] !== undefined) {
        $.rails.handleMethod($linkToVerify)
      }
      else {
        //[FIXME]Check this im not sure about this
        window.location.href = $linkToVerify.attr('href');
      }
    });

    return false;
  //});
  //return this;
  }

  $(document).ready(function() {
    //$("a[data-sweet-alert-confirm]").sweetAlertConfirm();
    $('a[data-sweet-alert-confirm]').on('click', sweetAlertConfirm)
  });

})( jQuery );

3 个答案:

答案 0 :(得分:0)

如果您在控制台上运行undefined时收到$.rails,则表示jquery_ujs未加载,您//= require jquery_ujs上是否有application.js文件?此文件是否也加载到您的布局上?

答案 1 :(得分:0)

   //= require jquery_ujs 

包含在我的application.js文件中,但在页面上,但由于某种原因它无法正常工作。所以我从github下载了jquery_ujs.js的副本,并将其加载到我的全局目录中。这似乎解决了未定义错误的问题。

谢谢你们!

答案 2 :(得分:0)

jquery_ujs之前要求rails-ujs向我提出伎俩。

//= require jquery
//= require jquery_ujs
//= require rails-ujs