0

美好的一天,我在我的网站项目中使用 jconfirm ,但我遇到了一个我自己无法解决的奇怪问题,请参阅下面的代码。

$.confirm({
    title: 'Add Patient',
   theme: 'material',
    backgroundDismissAnimation: 'glow',
    type:'blue',
    typeAnimated: true,
    content: '' +
    '<form action="" class="formName" style ="margin: 10px;">' +
    '<div class="form-group">' +
    '<label>ID NUMBER</label>' +
    '<input type="text" class="id_number form-control" value="my id" required />' +
    '</div>' +
    '</form>',
    buttons: {
        formSubmit: {
            text: 'Submit',
            btnClass: 'btn-blue',
            action: function () {
            }
        },
        cancel: function () {
            //close
        },
    },
    onContentReady: function () {
        this.$content.find('.id_number').change(function(){
            var a = this.$content.find('.id_number').val();
             alert(a);
        });
    }
});

如果您尝试运行该代码,它将返回一个错误说。

未捕获的类型错误:无法读取未定义的属性“查找”

但奇怪的是,如果我像这样更改代码。

onContentReady: function () {
                var a = this.$content.find('.id_number').val();
                 alert(a);
        }

错误消失并弹出警报。

我的问题是如何在 change() 方法中获取输入值?请帮助或使此代码有效的正确方法是什么?

onContentReady: function () {
            this.$content.find('.id_number').change(function(){
                var a = this.$content.find('.id_number').val();
                 alert(a);
            });
4

2 回答 2

2

为了补充应标记为正确的其他响应,可以通过三种方式定义this

  1. 函数调用(例如 f())——this 指的是全局对象。

  2. 方法调用(例如,af()) - 这指的是点左侧的对象(有时称为接收对象)。

  3. 新(构造函数)调用 - 这是指新分配的对象。

您的.change(...)电话是上面列表中的第二个示例。@sabithpocker 的解决方案在更改this值之前保存对的引用this

于 2018-01-30T05:05:55.723 回答
1

this函数内部的值不同change(),以检查您是否可以记录该值。

作为一种解决方法,您可以保留对它的引用并使用该引用。

您还可以使用bind()将 的值绑定this到事件处理程序。call()或使用或检查不同的其他方式apply

onContentReady: function() {
    var myReferenceToThis = this;
    this.$content.find('.id_number').change(function() {
      var a = myReferenceToThis.$content.find('.id_number').val();
      alert(a);
});

或者在您的情况下,正如@Phil 建议的那样,只需执行...

onContentReady: function() {
    var myReferenceToThis = this;
    this.$content.find('.id_number').change(function() {
      var a = $(this).val();
      alert(a);
 });
于 2018-01-30T04:57:46.930 回答