Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过;id";具有数组的函数的jquery元素的参数_Javascript_Jquery_Ajax_Function - Fatal编程技术网

Javascript 如何通过;id";具有数组的函数的jquery元素的参数

Javascript 如何通过;id";具有数组的函数的jquery元素的参数,javascript,jquery,ajax,function,Javascript,Jquery,Ajax,Function,因此,我创建了一个使用ajax jquery更新数据的函数,以便代码更短,并且可以反复使用。如下代码所示: $.fn.myUpdateConfig = function({ formcomp: formcomp, urlcomp: urlcomp, errorcomp: errorcomp, editcomp: editcomp, id: id, beforeajaxcallb: beforeAjaxCallb = null, successcallb: succes

因此,我创建了一个使用ajax jquery更新数据的函数,以便代码更短,并且可以反复使用。如下代码所示:

$.fn.myUpdateConfig = function({
  formcomp: formcomp,
  urlcomp: urlcomp,
  errorcomp: errorcomp,
  editcomp: editcomp,
  id: id,
  beforeajaxcallb: beforeAjaxCallb = null,
  successcallb: successCallb = null,
  errorcallb: errorCallb = null,
  completecallb: completeCallb = null,
}) {
  let element = $(this);
  element.click(function(e) {
      e.preventDefault();
      let formdata = new FormData(formcomp[0]);
      formdata.append('_method', 'PUT');
      formValidation('hide', '', [errorcomp, editcomp]);
      element.addClass('btn-progress');
      loader.show();

      console.log(id)); //parameter "id" returns an empty value

    if (beforeAjaxCallb instanceof Function) beforeAjaxCallb();

    $.ajax({
      url: urlcomp + id,
      data: formdata,
      method: 'POST',
      dataType: 'json',
      processData: false,
      contentType: false,
      success: function(data) {
        formValidation('hide', '', [errorcomp, editcomp]);
        succSwallTimer(data.message);
        if (successCallb instanceof Function) successCallb();
      },
      error: function(data) {
        errorMessage(data, errorcomp, editcomp);
        if (errorCallb instanceof Function) errorCallb();
      },
      complete: function() {
        element.removeClass('btn-progress');
        loader.hide();
        if (completeCallb instanceof Function) completeCallb();
      }
    });
  });
};
在注释部分
console.log(id)),参数“id”返回空值,因此返回错误“405此路由不支持PUT方法”,因为未发送id。

以下是一个函数调用:

$('#updateBtn').myUpdateConfig({
  formcomp: Vdef.formcomp.update,
  urlcomp: Vdef.urlcomp,
  errorcomp: Vdef.errorcomp.update,
  editcomp: Vdef.editcomp,
  id: $('#edit_id').val(),
  successcallb: function() {
    $('#editModal').modal('hide');
    Vdef.formcomp.update.trigger('reset');
  },
  completecallb: function() {
    table.draw();
  }
});
但是当我只传递不带val()的$
('#edit_id')
参数时,它会返回一个jquery对象。 结果: 和

结果:


因此,我想要的是如何传递取自
$('#edit_id').val()
的“id”参数,该参数可以传递到
myUpdateConfig()

在初始化小部件时,而不是在用户单击更新按钮时,您将获得
\edit_id
的值

更改它,以便将选择器传递给小部件,并在事件侦听器中获取值

$.fn.myUpdateConfig = function({
  formcomp: formcomp,
  urlcomp: urlcomp,
  errorcomp: errorcomp,
  editcomp: editcomp,
  selector: selector, // replacing id: id
  beforeajaxcallb: beforeAjaxCallb = null,
  successcallb: successCallb = null,
  errorcallb: errorCallb = null,
  completecallb: completeCallb = null,
}) {
  let element = $(this);
  element.click(function(e) {
      e.preventDefault();
      let formdata = new FormData(formcomp[0]);
      formdata.append('_method', 'PUT');
      formValidation('hide', '', [errorcomp, editcomp]);
      element.addClass('btn-progress');
      loader.show();
      let id = $(selector).val(); // Get value of input
      console.log(id));
    if (beforeAjaxCallb instanceof Function) beforeAjaxCallb();

    $.ajax({
      url: urlcomp + id,
      data: formdata,
      method: 'POST',
      dataType: 'json',
      processData: false,
      contentType: false,
      success: function(data) {
        formValidation('hide', '', [errorcomp, editcomp]);
        succSwallTimer(data.message);
        if (successCallb instanceof Function) successCallb();
      },
      error: function(data) {
        errorMessage(data, errorcomp, editcomp);
        if (errorCallb instanceof Function) errorCallb();
      },
      complete: function() {
        element.removeClass('btn-progress');
        loader.hide();
        if (completeCallb instanceof Function) completeCallb();
      }
    });
  });
};

$('#updateBtn').myUpdateConfig({
  formcomp: Vdef.formcomp.update,
  urlcomp: Vdef.urlcomp,
  errorcomp: Vdef.errorcomp.update,
  editcomp: Vdef.editcomp,
  selector: '#edit_id', // replacing id: $("#edit_id").val()
  successcallb: function() {
    $('#editModal').modal('hide');
    Vdef.formcomp.update.trigger('reset');
  },
  completecallb: function() {
    table.draw();
  }
});

当初始化小部件时,而不是当用户单击时,您正在设置
id
。是的,就是这样,用户单击按钮后有没有方法调用该函数?因为它是一个更新函数,所以实际上有一个编辑按钮(将数据设置为输入),包括$(“#edit_id”),在点击更新按钮之前。我没有问任何问题,那是什么答案?几分钟前我在下面发布了一个解决方案。问题是有几个对
myUpdateConfig()
函数的调用通过传递PHP传递“id”参数,例如
id:
,所以它不是所有的选择器或更改为
选择器:“
这不应该是
$member['id']
?如何将
$('#edit_id').val()
放入导致问题的JavaScript?一些小部件使用的另一种解决方案是允许参数成为值或函数。如果它是一个函数,小部件将在需要该值时调用该函数<代码>让实际_id=typeof id==“函数”?id.call(元素):id