Как получить варианты из HTML?
Я использую jQueryUI Widget Factory и пытаюсь получить параметры, которые я установил в html-файле.
Вот код виджета (form.js):
(function ($, undefined) {
$.widget('ulti.uiForm', {
//#region options
options: {
url: "",
thankYou: true,//Enable thank you page
thankYouPage:null,
selector: 'form',
posted: null, // Callback for ajax done method.
//#region leadTemplate
leadTemplate : {
},
//#endregion leadTemplate
},
//#endregion options
_create: function () {
this.element.addClass("ulti-uiForm");
},
_init: function () {
// Load/copy lead template to element instance data...
this.element.data('lead', this.options.leadTemplate);
this._appendQSParms(this.element.data('lead'));
},
destroy: function () {
// Restore element to pre-uiForm create state...
this.element.removeClass('ulti-uiForm');
this._destroy();
},
// Very basic diagnosic method to check that all minimum requirements are populated on the object.
// TODO EXPOSE .done as a posted callback in options.
post: function () {
var $ajaxResult;
var self = this;
$.ajax({
type: 'POST',
url: this.options.url,
data: JSON.stringify(this.element.data('lead')),
dataType: "json",
contentType: "application/json; charset=UTF-8",
accept: "application/json",
beforeSend: function () {
}
})
// callback handler on success - populate lead object with returned data.
.done(function (response, textStatus, jqXHR) {
self.element.data('lead', response);
self._trigger("posted", self.element.data('lead'));
if (options.thankYou === true) {
window.location.replace(options.thankYouPage);
}
})
// callback handler that will be called on failure
.fail(function (jqXHR, textStatus, errorThrown) { //.fail(function () {
// log the error to the console
console.error("Error POSTing gateway object. Status:" + textStatus + " Error: " + errorThrown);
})
.always(function (jqXHR, textStatus, errorThrown) {
});
return self; // support chaining...
},
_setOption: function (key, value) {
this._super(key, value);
}
});
})(jQuery);
JS, который находится в HTML:
var uiForm;
uiForm = $('#stepform').uiForm({
options: {
url: 'http://someurl.cloudapp.net/api/leads',
thankYouPage:'thankyou.html',
posted: function (evt) {
//notEqual(uiForm.data('lead').SessionId, null, "Post operation succeeded lead sessionId: " + uiForm.data('lead').SessionId);
//start();
}
}
});
$("#btnSubmit").click(function () {
//post the form
uiForm.uiForm('post');
});
Я просто хочу отправить опцию thankYouPage из js в html-файле в form.js и применить опцию к обратному вызову "done":
if (this.options.thankYou === true) {
window.location.replace(options.thankYouPage);
}
Ваше понимание очень ценится.
2 ответа
Когда вы вызываете свой виджет, передайте options
объект. В вашем коде вы передаете options
объект как свойство родительского объекта. Не используйте родительский объект, просто передайте его напрямую.
var uiForm = $('#stepform').uiForm({
url: 'http://someurl.cloudapp.net/api/leads',
thankYouPage:'thankyou.html',
posted: function (evt) {
//notEqual(uiForm.data('lead').SessionId, null, "Post operation succeeded lead sessionId: " + uiForm.data('lead').SessionId);
//start();
}
});
Я не уверен, что вы спрашиваете здесь: "Отправьте опцию thankYouPage из js в html-файле в form.js и примените опцию к завершенному обратному вызову"... Если вы предполагаете, что вы пытаетесь чтобы сделать это извлечь данные из вашего HTML, у вас есть два способа:
1 - Извлечь данные из данных *, таких как
<div id="ImSomeWhereInYourCode" data-star="SomeValue">*</div>
а также
var star = $("#ImSomeWhereInYourCode").attr("data-star");
// This will set star to "SomeValue"
2 - Добавьте к глобальной области непосредственно на сборке вашей страницы, и ссылки на нее позже.
<script>
window.star = "SomeValue";
// ... Later ...
.done(function () {
var newVar = window.star;
// newVar = "SomeValue"
});
</script>