के साथ किसी फ़ॉर्म की क्रिया को बदलना मुझे एक समस्या है जो मुझे पागल कर रही है। मैं फेसबुक का समर्थन करने के लिए ओपनिड-चयनकर्ता को संशोधित करने की कोशिश कर रहा हूं। मैं अपने प्रदाता के रूप में RPXNow का उपयोग कर रहा हूं, इसलिए इसे मानक की तुलना में फ़ॉर्म को एक अलग यूआरएल में सबमिट करने की आवश्यकता है।जावास्क्रिप्ट/jQuery
उदाहरण के लिए। RpxNow इस तरह मेरी प्रपत्र सेटअप करने के लिए मुझे आवश्यकता है:
<form action="https://wikipediamaze.rpxnow.com/openid/start?token_url=...">
यह फेसबुक और माइस्पेस के अलावा प्रत्येक प्रदाता के लिए काम करता है। उन की आवश्यकता प्रपत्र इस तरह एक अलग यूआरएल के लिए तैनात किया जाना है:
<form action="https://wikipediamaze.rpxnow.com/facebook/start?token_url=...">
और
<form action="https://wikipediamaze.rpxnow.com/myspace/start?token_url=...">
खुला आईडी चयनकर्ता प्रपत्र पर बटन का एक समूह है प्रत्येक openid प्रदाताओं का प्रतिनिधित्व । मैं जो करने की कोशिश कर रहा हूं वह पता लगाता है कि फेसबुक या माइस्पेस बटन पर क्लिक होने पर सबमिट करने से पहले फॉर्म पर कार्रवाई को बदल दिया गया है। हालांकि यह काम नहीं कर रहा है। मेरा कोड यहाँ है।
मैं सभी एक ही "समर्थित नहीं" अपवाद
$("#openid_form").attr("action", form_url)
document.forms[0].action = form_url
कोई सुझाव के साथ कई रूप की कोशिश की है?
अद्यतन
यहाँ कोड के बारे में अधिक विवरण दिए गए हैं। मैंने कुछ को अल्पसंख्यक के लिए छोड़ दिया है। एकमात्र चीज जो मैंने किया है, उसे "प्रदाता_लार्ज" ऑब्जेक्ट (जो सफलतापूर्वक वेबसाइट पर लोगो जोड़ता है) में फेसबुक अनुभाग जोड़ा गया है, और उपयोगकर्ता की पहचान करने वाले यूआरएल की आपूर्ति करने के बजाय, मैं "form_url" नामक एक संपत्ति बना रहा हूं, मैं अपने फॉर्म की कार्रवाई को सेट करना चाहता हूं। यदि आप अनुभाग प्रदाता "प्रदाता छवि क्लिक" देखते हैं तो आप देखेंगे कि मैं "form_url" संपत्ति की उपस्थिति के लिए कहां जांच कर रहा हूं और कार्रवाई को बदलने और फ़ॉर्म सबमिट करने के लिए jQuery का उपयोग कर रहा हूं। हालांकि जब मैं डीबग मोड में जावास्क्रिप्ट को चलाता हूं तो यह मुझे बताता है कि यह एक अवैध ऑपरेशन है।
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('<br/>');
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 '<a title="'+provider["name"]+'" href="javascript: openid.signin(\''+ box_id +'\');"' +
' style="background: #FFF url(' + this.img_path + box_id + image_ext+') no-repeat center center" ' +
'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
},
/* 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('<input type="hidden" id="' + this.input_id + '" name="' + this.input_id + '" value="'+url+'"/>');
}
},
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('<div id="openid_highlight"></div>');
},
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 = '<p>' + label + '</p>';
}
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 id="'+id+'" type="text" style="'+style+'" name="'+id+'" value="'+value+'" />' +
'<input id="openid_submit" type="submit" value="Sign-In"/>';
input_area.empty();
input_area.append(html);
$('#'+id).focus();
}
};
हम वास्तव में अधिक कोड की जरूरत है। बटन का HTML कैसा दिखता है? आसान चयन के लिए ओपनिड फॉर्म आईडी क्यों न दें? क्या यह आपके नियंत्रण से बाहर है? –
मुझे यकीन नहीं है कि मैं आपको कौन सा कोड दे सकता हूं। समस्या मेरा चयन नहीं है। मैं सफलतापूर्वक $ ("# openid_form") कॉल कर सकता हूं। सबमिट करें()। समस्या यह है कि जब मैं फॉर्म की एक्शन विशेषता को बदलने की कोशिश करता हूं तो यह एक त्रुटि फेंकता है। – Micah
@ मिकाह - क्या आप इस मुद्दे को हल करने में सक्षम थे? क्या मेरा जवाब आपकी मदद करता है? –