我有一个让我发疯的问题.我正在尝试修改openid-selector以支持facebook.我正在使用RPXNow作为我的提供者,因此它要求将表单提交给与标准不同的URL.
例如.RpxNow要求我像这样设置我的表单:
这适用于除Facebook和Myspace之外的所有提供商.那些需要将表单发布到不同的URL,如下所示:
和
open id选择器在表单上有一堆按钮,每个按钮代表openid提供程序.我要做的是检测点击Facebook或Myspace按钮的时间,并在提交前更改表单上的操作.然而,它不起作用.这是我的代码.
我尝试了几种具有相同"不支持"异常的变体
$("#openid_form").attr("action", form_url) document.forms[0].action = form_url
有什么建议?
更新
以下是有关代码的更多详细信息.为简洁起见,我省略了一些.我唯一做的是将Facebook部分添加到"providers_large"对象(成功地将徽标添加到网站),而不是提供识别用户的URL,我正在创建一个名为"form_url"的属性,是我想要设置我的表单的动作.如果您查看标题"提供者图像点击",您将看到我在哪里检查属性"form_url"的存在,并使用jQuery更改操作并提交表单.但是,当我在调试模式中单步执行JavaScript时,它告诉我这是一个无效的操作.
var providers_large = { google: { name: 'Google', url: 'https://www.google.com/accounts/o8/id' }, facebook: { name: 'Facebook', form_url: 'http://wikipediamaze.rpxnow.com/facebook/start?token_url=http://www.wikipediamaze.com/Accounts/Logon' }, }; var providers_small = { myopenid: { name: 'MyOpenID', label: 'Enter your MyOpenID username.', url: 'http://{username}.myopenid.com/' }, livejournal: { name: 'LiveJournal', label: 'Enter your Livejournal username.', url: 'http://{username}.livejournal.com/' }, flickr: { name: 'Flickr', label: 'Enter your Flickr username.', url: 'http://flickr.com/{username}/' }, technorati: { name: 'Technorati', label: 'Enter your Technorati username.', url: 'http://technorati.com/people/technorati/{username}/' }, wordpress: { name: 'Wordpress', label: 'Enter your Wordpress.com username.', url: 'http://{username}.wordpress.com/' }, blogger: { name: 'Blogger', label: 'Your Blogger account', url: 'http://{username}.blogspot.com/' }, verisign: { name: 'Verisign', label: 'Your Verisign username', url: 'http://{username}.pip.verisignlabs.com/' }, vidoop: { name: 'Vidoop', label: 'Your Vidoop username', url: 'http://{username}.myvidoop.com/' }, verisign: { name: 'Verisign', label: 'Your Verisign username', url: 'http://{username}.pip.verisignlabs.com/' }, claimid: { name: 'ClaimID', label: 'Your ClaimID username', url: 'http://claimid.com/{username}' } }; var providers = $.extend({}, providers_large, providers_small); var openid = { cookie_expires: 6*30, // 6 months. cookie_name: 'openid_provider', cookie_path: '/', img_path: 'images/', input_id: null, provider_url: null, init: function(input_id) { var openid_btns = $('#openid_btns'); this.input_id = input_id; $('#openid_choice').show(); $('#openid_input_area').empty(); // add box for each provider for (id in providers_large) { openid_btns.append(this.getBoxHTML(providers_large[id], 'large', '.gif')); } if (providers_small) { openid_btns.append('
'); for (id in providers_small) { openid_btns.append(this.getBoxHTML(providers_small[id], 'small', '.ico')); } } $('#openid_form').submit(this.submit); var box_id = this.readCookie(); if (box_id) { this.signin(box_id, true); } }, getBoxHTML: function(provider, box_size, image_ext) { var box_id = provider["name"].toLowerCase(); return ''; }, /* Provider image click */ signin: function(box_id, onload) { var provider = providers[box_id]; if (! provider) { return; } this.highlight(box_id); this.setCookie(box_id); // prompt user for input? if (provider['label']) { this.useInputBox(provider); this.provider_url = provider['url']; } else if(provider['form_url']) { $('#openid_form').attr("action", provider['form_url']); $('#openid_form').submit(); } else { this.setOpenIdUrl(provider['url']); if (! onload) { $('#openid_form').submit(); } } }, /* Sign-in button click */ submit: function() { var url = openid.provider_url; if (url) { url = url.replace('{username}', $('#openid_username').val()); openid.setOpenIdUrl(url); } return true; }, setOpenIdUrl: function (url) { var hidden = $('#'+this.input_id); if (hidden.length > 0) { hidden.value = url; } else { $('#openid_form').append(''); } }, highlight: function (box_id) { // remove previous highlight. var highlight = $('#openid_highlight'); if (highlight) { highlight.replaceWith($('#openid_highlight a')[0]); } // add new highlight. $('.'+box_id).wrap(''); }, setCookie: function (value) { var date = new Date(); date.setTime(date.getTime()+(this.cookie_expires*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); document.cookie = this.cookie_name+"="+value+expires+"; path=" + this.cookie_path; }, readCookie: function () { var nameEQ = this.cookie_name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; }, useInputBox: function (provider) { var input_area = $('#openid_input_area'); var html = ''; var id = 'openid_username'; var value = ''; var label = provider['label']; var style = ''; if (label) { html = '' + label + '
'; } if (provider['name'] == 'OpenID') { id = this.input_id; value = 'http://'; style = 'background:#FFF url('+this.img_path+'openid-inputicon.gif) no-repeat scroll 0 50%; padding-left:18px;'; } html += '' + ''; input_area.empty(); input_area.append(html); $('#'+id).focus(); } };
Tamlyn.. 125
如果你有任何名为"action"的表单元素,jQuery(1.4.2)会感到困惑.您可以使用DOM属性方法解决这个问题,或者只是避免使用名为"action"的表单元素.
谢谢,这对我帮助很大.当我留下一些头发时,我发现了这个,哇. (9认同)
我也有这种情况,但我的情况更危险.我刚刚使用了Wordpress settings_field()函数,只是发现函数输出了.非常感谢你做的这些. (2认同)
Jose Basilio.. 25
我同意保罗的意见,我们需要看到更多代码.我测试了这个过于简化的例子并且它有效.这意味着它可以动态更改表单操作.
编辑:我测试了您发布的更新代码,并在声明中发现语法错误providers_large
.还有一个额外的逗号.Firefox忽略了这个问题,但是IE8抛出了一个错误.
var providers_large = { google: { name: 'Google', url: 'https://www.google.com/accounts/o8/id' }, facebook: { name: 'Facebook', form_url: 'http://wikipediamaze.rpxnow.com/facebook/start?token_url=http://www.wikipediamaze.com/Accounts/Logon' }, //<-- Here's the problem. Remove that comma };
yitwail.. 6
只是为Tamlyn写的而不是添加细节
$('form').get(0).setAttribute('action', 'baz'); //this works
$('form')[0].setAttribute('action', 'baz');
同样有效
如果你有任何名为"action"的表单元素,jQuery(1.4.2)会感到困惑.您可以使用DOM属性方法解决这个问题,或者只是避免使用名为"action"的表单元素.
我同意保罗的意见,我们需要看到更多代码.我测试了这个过于简化的例子并且它有效.这意味着它可以动态更改表单操作.
编辑:我测试了您发布的更新代码,并在声明中发现语法错误providers_large
.还有一个额外的逗号.Firefox忽略了这个问题,但是IE8抛出了一个错误.
var providers_large = { google: { name: 'Google', url: 'https://www.google.com/accounts/o8/id' }, facebook: { name: 'Facebook', form_url: 'http://wikipediamaze.rpxnow.com/facebook/start?token_url=http://www.wikipediamaze.com/Accounts/Logon' }, //<-- Here's the problem. Remove that comma };
只是为Tamlyn写的而不是添加细节
$('form').get(0).setAttribute('action', 'baz'); //this works
$('form')[0].setAttribute('action', 'baz');
同样有效