Как получить варианты из 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>
Другие вопросы по тегам