使用jQuery将输入属性附加到变量/对象

时间:2013-07-12 18:28:31

标签: javascript jquery knockout.js

我正在尝试将平衡支付处理合并到我的网站中,但是,他们的解决方案假设正在使用标准HTML表单并使用jQuery检索它。由于我使用knockout.js为表单提供支持,因此输入的引用方式不同,这意味着我必须修改表单。对于此示例,我手动设置信用卡数据的值,而不是从$(#credit-card-form)

中取出

当我打开网络选项卡检查错误时,它显示“Uncaught TypeError:对象#的属性'0'不是一个函数”,我认为这是在引用附加到creditCardData的输入属性

This fiddle是Balanced提供的示例,用于展示其工作原理。在javascript区域中,您必须创建一个新的request bin并将该bin复制到代码中。然后,当您更新代码并单击“tokenize”时,请访问该请求bin URL,您将看到请求已提交。

我创建了this fiddle,它正确地对卡片进行了标记,但是我遇到了错误,无法将其固定到它们来自的位置。请记住,您必须创建自己的requestbin并将该网址复制/粘贴到代码中。只是抬头,“标记化”按钮不会做任何事情。我只是将HTML留在那里,考虑到小提琴打开后立即调用该函数,它实际上没有做任何事情。

我的版本和Balanced之间的主要区别在于对balanced.js函数的初始调用。

//paidForItems is a button set with knockout.js
self.paidForItems = function() {

      //responseCallbackHandler here, see fiddle for details

     var creditCardData = {
        card_number: '4111111111111111',
        expiration_month: '01',
        expiration_year: '2020',
        security_code: '123'
    };

    balanced.card.create(creditCardData, responseCallbackHandler);
}

在提交表格时,它会平衡吗

 //responseCallbackHandler here, see fiddle for details

var tokenizeInstrument = function(e) {
   e.preventDefault();

   var $form = $('#credit-card-form');
   var creditCardData = {
        card_number: $form.find('.cc-number').val(),
        expiration_month: $form.find('.cc-em').val(),
        expiration_year: $form.find('.cc-ey').val(),
        security_code: $form.find('cc-csc').val()
    };

    balanced.card.create(creditCardData, responseCallbackHandler);
};
$('#credit-card-form').submit(tokenizeInstrument);

1 个答案:

答案 0 :(得分:1)

由于评论有点冗长,所以要回答。

我不再收到权限错误了,所以我觉得有些东西在工作时被阻止了。

主要区别在于他们正在提交HTML表单并且您正在(尝试)提交javascript对象。

我很确定你无法在任何随机对象上调用.submit()

你需要这样做:

http://jsfiddle.net/sKjPF/2/

case 201:
            console.log(response.data);
            var cardTokenURI = response.data['uri'];

            // append the token as a hidden field to submit to the server
              var form = $("#credit-card-form");
            $('<input>').attr({
               type: 'hidden',
               value: cardTokenURI,
               name: 'balancedCreditCardURI'
            }).appendTo(form);
            form.attr({action: requestBinURL});
            form.submit();

如果这没有帮助,请告诉我。