将 class/object->function() 调用插入 onsubmit 事件

Insert class/object->function() call into onsubmit event

我正在尝试更改表单上的默认提交操作。提交现在由原型 js 对象-> 函数控制。

     <form action="" method="post" id="product_composite_configure_form" enctype="multipart/form-data" onsubmit="productConfigure.onConfirmBtn(); return false;" target="product_composite_configure_iframe">

我正在使用以下 javascript (jquery) 来更改默认提交操作。我的目标是在 onsubmit 侦听器中插入一个不同的函数。

primaMakeOrder.prototype = {
    constructor: primaMakeOrder,

    start: function(response){

        this.storeOptions();
    },

     storeOptions: function(){
        $j("#product_composite_configure_form").attr("onsubmit",this.saveOptions());
    },

    saveOptions: function(){
        console.log('this is a test')
    }
 }

 $j(document).ready(function($j) {
    primaMakeOrder = new primaMakeOrder();
    primaMakeOrder.start();
});

在这里提交一个值并不难,让它执行一个基于此的函数也很简单。我遇到的问题是让它执行 class 对象中的函数,特别是 primaMakeOrder.saveOption()。问题似乎与实例化有关,但这并不完全正确,因为 javascript 本身有效。

我尝试单独添加 - primaMakeOrder.saveOptions() 和 saveOptions() 但这不起作用。理想情况下,我想要一个可以从 javascript 文件执行的解决方案,而不是在包含

之类的标记上执行的解决方案
  primaMakeOrder = new primaMakeOrder();
  primaMakeOrder.saveOptions();

*旁注 - 我知道同时使用原型和 jquery 可能看起来很奇怪。这是一个更大的应用程序的一部分,这样做是有原因的。 另外,我的术语可能有点不对,所以很抱歉,我不太懂 js 编码。

*阅读 - 在发布这篇文章之前,我环顾了 google 一下,一切似乎都暗示了以下格式

  class.function()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects http://www.mrspeaker.net/2009/10/28/using-jquery-on-javascript-objects/ http://www.htmlgoodies.com/beyond/javascript/calling-object-methods-in-javascript.html

我的要求似乎确实有点不同,我正在努力寻找其他人回答我的确切问题

您覆盖了所有变量范围!我猜 primaMakeOrder 已被定义为全局变量。因此,当您尝试使用 primaMakeOrder = new primaMakeOrder(); 重新分配它时,引用会丢失并且您取回的对象具有与您想象的不同的原型。

我建议提供一些作用域并避免使用全局变量。我还建议更改您的原型编码风格。对象字面量可能会造成混淆并产生意想不到的副作用(主要是结束原型链)。

(function() {
  // Wrap your code in an IIFE
  function PrimaOrder() {
    // this is your constructor
  }

  PrimaOrder.prototype.saveOptions = function() {
    // here is your saveOptions function on every PrimaOrder instance.
  };

  $(function() {
    // Use var to prevent making global variables
    var myPrimaOrder = new PrimaOrder();
    // Notice I use a different name. PrimaOrder is the variable that is
    // the "class" while myPrimaOrder is an "instance".
    myPrimaOrder.saveOptions();
  });
})(); // IIFE's require a trailing ()
// Search Google for Immediately Invoked Function Expression.