我正在尝试更改表单上的默认提交操作。提交由原型js object->函数控制。
<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();
});
在这里提交一个值并不困难,让它执行基于此的函数也很简单。我遇到的麻烦是让它执行一个特定于primaMakeOrder.saveOption()的类对象中的函数。问题似乎是围绕实例化,但这不能完全正确,因为javascript本身就可以工作。
我尝试过添加 - primaMakeOrder.saveOptions()和saveOptions(),但这不起作用。理想情况下,我想要一个可以从javascript文件而不是标记执行的解决方案,包括
primaMakeOrder = new primaMakeOrder();
primaMakeOrder.saveOptions();
*旁注 - 我知道将原型和jquery一起使用可能看起来很奇怪。这是更大的应用程序的一部分,并且有理由这样做。 此外,我的术语可能有点偏离,所以道歉,我不是js编码器。
*阅读 - 在发布此内容之前我已经浏览了一下谷歌并且所有内容似乎都提示以下格式
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
我的要求确实有点不同,我正在努力寻找别人回答我的确切问题
答案 0 :(得分:1)
覆盖所有变量范围!我猜测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.