/*! SerializeJSON jQuery plugin. https://github.com/marioizquierdo/jquery.serializeJSON version 3.2.0 (Dec, 2020) Copyright (c) 2012-2021 Mario Izquierdo Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. */ (function (factory) { /* global define, require, module */ if (typeof define === "function" && define.amd) { // AMD. Register as an anonymous module. define(["jquery"], factory); } else if (typeof exports === "object") { // Node/CommonJS var jQuery = require("jquery"); module.exports = factory(jQuery); } else { // Browser globals (zepto supported) factory(window.jQuery || window.Zepto || window.$); // Zepto supported on browsers as well } }(function ($) { "use strict"; var rCRLF = /\r?\n/g; var rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i; var rsubmittable = /^(?:input|select|textarea|keygen)/i; var rcheckableType = /^(?:checkbox|radio)$/i; $.fn.serializeJSON = function (options) { var f = $.serializeJSON; var $form = this; // NOTE: the set of matched elements is most likely a form, but it could also be a group of inputs var opts = f.setupOpts(options); // validate options and apply defaults var typeFunctions = $.extend({}, opts.defaultTypes, opts.customTypes); // Make a list with {name, value, el} for each input element var serializedArray = f.serializeArray($form, opts); // Convert the serializedArray into a serializedObject with nested keys var serializedObject = {}; $.each(serializedArray, function (_i, obj) { var nameSansType = obj.name; var type = $(obj.el).attr("data-value-type"); if (!type && !opts.disableColonTypes) { // try getting the type from the input name var p = f.splitType(obj.name); // "foo:string" => ["foo", "string"] nameSansType = p[0]; type = p[1]; } if (type === "skip") { return; // ignore fields with type skip } if (!type) { type = opts.defaultType; // "string" by default } var typedValue = f.applyTypeFunc(obj.name, obj.value, type, obj.el, typeFunctions); // Parse type as string, number, etc. if (!typedValue && f.shouldSkipFalsy(obj.name, nameSansType, type, obj.el, opts)) { return; // ignore falsy inputs if specified in the options } var keys = f.splitInputNameIntoKeysArray(nameSansType); f.deepSet(serializedObject, keys, typedValue, opts); }); return serializedObject; }; // Use $.serializeJSON as namespace for the auxiliar functions // and to define defaults $.serializeJSON = { defaultOptions: {}, // reassign to override option defaults for all serializeJSON calls defaultBaseOptions: { // do not modify, use defaultOptions instead checkboxUncheckedValue: undefined, // to include that value for unchecked checkboxes (instead of ignoring them) useIntKeysAsArrayIndex: false, // name="foo[2]" value="v" => {foo: [null, null, "v"]}, instead of {foo: ["2": "v"]} skipFalsyValuesForTypes: [], // skip serialization of falsy values for listed value types skipFalsyValuesForFields: [], // skip serialization of falsy values for listed field names disableColonTypes: false, // do not interpret ":type" suffix as a type customTypes: {}, // extends defaultTypes defaultTypes: { "string": function(str) { return String(str); }, "number": function(str) { return Number(str); }, "boolean": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1; }, "null": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1 ? str : null; }, "array": function(str) { return JSON.parse(str); }, "object": function(str) { return JSON.parse(str); }, "skip": null // skip is a special type used to ignore fields }, defaultType: "string", }, // Validate and set defaults setupOpts: function(options) { if (options == null) options = {}; var f = $.serializeJSON; // Validate var validOpts = [ "checkboxUncheckedValue", "useIntKeysAsArrayIndex", "skipFalsyValuesForTypes", "skipFalsyValuesForFields", "disableColonTypes", "customTypes", "defaultTypes", "defaultType" ]; for (var opt in options) { if (validOpts.indexOf(opt) === -1) { throw new Error("serializeJSON ERROR: invalid option '" + opt + "'. Please use one of " + validOpts.join(", ")); } } // Helper to get options or defaults return $.extend({}, f.defaultBaseOptions, f.defaultOptions, options); }, // Just like jQuery's serializeArray method, returns an array of objects with name and value. // but also includes the dom element (el) and is handles unchecked checkboxes if the option or data attribute are provided. serializeArray: function($form, opts) { if (opts == null) { opts = {}; } var f = $.serializeJSON; return $form.map(function() { var elements = $.prop(this, "elements"); // handle propHook "elements" to filter or add form elements return elements ? $.makeArray(elements) : this; }).filter(function() { var $el = $(this); var type = this.type; // Filter with the standard W3C rules for successful controls: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 return this.name && // must contain a name attribute !$el.is(":disabled") && // must not be disable (use .is(":disabled") so that fieldset[disabled] works) rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && // only serialize submittable fields (and not buttons) (this.checked || !rcheckableType.test(type) || f.getCheckboxUncheckedValue($el, opts) != null); // skip unchecked checkboxes (unless using opts) }).map(function(_i, el) { var $el = $(this); var val = $el.val(); var type = this.type; // "input", "select", "textarea", "checkbox", etc. if (val == null) { return null; } if (rcheckableType.test(type) && !this.checked) { val = f.getCheckboxUncheckedValue($el, opts); } if (isArray(val)) { return $.map(val, function(val) { return { name: el.name, value: val.replace(rCRLF, "\r\n"), el: el }; } ); } return { name: el.name, value: val.replace(rCRLF, "\r\n"), el: el }; }).get(); }, getCheckboxUncheckedValue: function($el, opts) { var val = $el.attr("data-unchecked-value"); if (val == null) { val = opts.checkboxUncheckedValue; } return val; }, // Parse value with type function applyTypeFunc: function(name, valStr, type, el, typeFunctions) { var typeFunc = typeFunctions[type]; if (!typeFunc) { // quick feedback to user if there is a typo or missconfiguration throw new Error("serializeJSON ERROR: Invalid type " + type + " found in input name '" + name + "', please use one of " + objectKeys(typeFunctions).join(", ")); } return typeFunc(valStr, el); }, // Splits a field name into the name and the type. Examples: // "foo" => ["foo", ""] // "foo:boolean" => ["foo", "boolean"] // "foo[bar]:null" => ["foo[bar]", "null"] splitType : function(name) { var parts = name.split(":"); if (parts.length > 1) { var t = parts.pop(); return [parts.join(":"), t]; } else { return [name, ""]; } }, // Check if this input should be skipped when it has a falsy value, // depending on the options to skip values by name or type, and the data-skip-falsy attribute. shouldSkipFalsy: function(name, nameSansType, type, el, opts) { var skipFromDataAttr = $(el).attr("data-skip-falsy"); if (skipFromDataAttr != null) { return skipFromDataAttr !== "false"; // any value is true, except the string "false" } var optForFields = opts.skipFalsyValuesForFields; if (optForFields && (optForFields.indexOf(nameSansType) !== -1 || optForFields.indexOf(name) !== -1)) { return true; } var optForTypes = opts.skipFalsyValuesForTypes; if (optForTypes && optForTypes.indexOf(type) !== -1) { return true; } return false; }, // Split the input name in programatically readable keys. // Examples: // "foo" => ["foo"] // "[foo]" => ["foo"] // "foo[inn][bar]" => ["foo", "inn", "bar"] // "foo[inn[bar]]" => ["foo", "inn", "bar"] // "foo[inn][arr][0]" => ["foo", "inn", "arr", "0"] // "arr[][val]" => ["arr", "", "val"] splitInputNameIntoKeysArray: function(nameWithNoType) { var keys = nameWithNoType.split("["); // split string into array keys = $.map(keys, function (key) { return key.replace(/\]/g, ""); }); // remove closing brackets if (keys[0] === "") { keys.shift(); } // ensure no opening bracket ("[foo][inn]" should be same as "foo[inn]") return keys; }, // Set a value in an object or array, using multiple keys to set in a nested object or array. // This is the main function of the script, that allows serializeJSON to use nested keys. // Examples: // // deepSet(obj, ["foo"], v) // obj["foo"] = v // deepSet(obj, ["foo", "inn"], v) // obj["foo"]["inn"] = v // Create the inner obj["foo"] object, if needed // deepSet(obj, ["foo", "inn", "123"], v) // obj["foo"]["arr"]["123"] = v // // // deepSet(obj, ["0"], v) // obj["0"] = v // deepSet(arr, ["0"], v, {useIntKeysAsArrayIndex: true}) // arr[0] = v // deepSet(arr, [""], v) // arr.push(v) // deepSet(obj, ["arr", ""], v) // obj["arr"].push(v) // // arr = []; // deepSet(arr, ["", v] // arr => [v] // deepSet(arr, ["", "foo"], v) // arr => [v, {foo: v}] // deepSet(arr, ["", "bar"], v) // arr => [v, {foo: v, bar: v}] // deepSet(arr, ["", "bar"], v) // arr => [v, {foo: v, bar: v}, {bar: v}] // deepSet: function (o, keys, value, opts) { if (opts == null) { opts = {}; } var f = $.serializeJSON; if (isUndefined(o)) { throw new Error("ArgumentError: param 'o' expected to be an object or array, found undefined"); } if (!keys || keys.length === 0) { throw new Error("ArgumentError: param 'keys' expected to be an array with least one element"); } var key = keys[0]; // Only one key, then it's not a deepSet, just assign the value in the object or add it to the array. if (keys.length === 1) { if (key === "") { // push values into an array (o must be an array) o.push(value); } else { o[key] = value; // keys can be object keys (strings) or array indexes (numbers) } return; } var nextKey = keys[1]; // nested key var tailKeys = keys.slice(1); // list of all other nested keys (nextKey is first) if (key === "") { // push nested objects into an array (o must be an array) var lastIdx = o.length - 1; var lastVal = o[lastIdx]; // if the last value is an object or array, and the new key is not set yet if (isObject(lastVal) && isUndefined(f.deepGet(lastVal, tailKeys))) { key = lastIdx; // then set the new value as a new attribute of the same object } else { key = lastIdx + 1; // otherwise, add a new element in the array } } if (nextKey === "") { // "" is used to push values into the nested array "array[]" if (isUndefined(o[key]) || !isArray(o[key])) { o[key] = []; // define (or override) as array to push values } } else { if (opts.useIntKeysAsArrayIndex && isValidArrayIndex(nextKey)) { // if 1, 2, 3 ... then use an array, where nextKey is the index if (isUndefined(o[key]) || !isArray(o[key])) { o[key] = []; // define (or override) as array, to insert values using int keys as array indexes } } else { // nextKey is going to be the nested object's attribute if (isUndefined(o[key]) || !isObject(o[key])) { o[key] = {}; // define (or override) as object, to set nested properties } } } // Recursively set the inner object f.deepSet(o[key], tailKeys, value, opts); }, deepGet: function (o, keys) { var f = $.serializeJSON; if (isUndefined(o) || isUndefined(keys) || keys.length === 0 || (!isObject(o) && !isArray(o))) { return o; } var key = keys[0]; if (key === "") { // "" means next array index (used by deepSet) return undefined; } if (keys.length === 1) { return o[key]; } var tailKeys = keys.slice(1); return f.deepGet(o[key], tailKeys); } }; // polyfill Object.keys to get option keys in IE<9 var objectKeys = function(obj) { if (Object.keys) { return Object.keys(obj); } else { var key, keys = []; for (key in obj) { keys.push(key); } return keys; } }; var isObject = function(obj) { return obj === Object(obj); }; // true for Objects and Arrays var isUndefined = function(obj) { return obj === void 0; }; // safe check for undefined values var isValidArrayIndex = function(val) { return /^[0-9]+$/.test(String(val)); }; // 1,2,3,4 ... are valid array indexes var isArray = Array.isArray || function(obj) { return Object.prototype.toString.call(obj) === "[object Array]"; }; })); 9096bet - Anh Vũ Miner https://anhvuminer.com.vn/category/9096bet Mon, 10 Mar 2025 15:57:00 +0000 vi hourly 1 https://wordpress.org/?v=6.7.2 https://anhvuminer.com.vn/wp-content/uploads/2023/04/cropped-z4289938824996_e4bd86be4fe4ff921f7df49296a1a850-removebg-preview-e1682319998561-32x32.png 9096bet - Anh Vũ Miner https://anhvuminer.com.vn/category/9096bet 32 32 A Ascensão do 9096Bet Sua Porta de Entrada para Apostas Online https://anhvuminer.com.vn/a-ascensao-do-9096bet-sua-porta-de-entrada-para.html https://anhvuminer.com.vn/a-ascensao-do-9096bet-sua-porta-de-entrada-para.html#respond Mon, 10 Mar 2025 16:02:57 +0000 https://anhvuminer.com.vn/?p=2100 https://9096bet.net Introdução ao 9096Bet Nos últimos anos, a indústria de apostas online cresceu exponencialmente, atraindo um público cada vez mais amplo e diversificado. Entre as diversas plataformas disponíveis, o 9096Bet se destaca pela sua abordagem inovadora e pela ampliação das opções de apostas para os usuários. Neste artigo, vamos explorar o que torna o 9096Bet...

The post A Ascensão do 9096Bet Sua Porta de Entrada para Apostas Online appeared first on Anh Vũ Miner.

]]>
A Ascensão do 9096Bet Sua Porta de Entrada para Apostas Online

https://9096bet.net

Introdução ao 9096Bet

Nos últimos anos, a indústria de apostas online cresceu exponencialmente, atraindo um público cada vez mais amplo e diversificado. Entre as diversas plataformas disponíveis, o 9096Bet se destaca pela sua abordagem inovadora e pela ampliação das opções de apostas para os usuários. Neste artigo, vamos explorar o que torna o 9096Bet uma das melhores escolhas para apostadores de todos os níveis, como funciona, suas ofertas e as vantagens que proporciona aos seus usuários.

O Que É o 9096Bet?

O 9096Bet é uma plataforma de apostas online que oferece uma vasta gama de opções para entusiastas das apostas, que vão desde esportes até jogos de cassino. Com um layout intuitivo e fácil de navegar, o site se propõe a garantir que a experiência do usuário seja a mais agradável possível, independentemente do tipo de aposta que se deseja fazer. Adicionalmente, a plataforma é acessível tanto em dispositivos móveis quanto em desktop, garantindo que os usuários possam realizar suas apostas em qualquer lugar e a qualquer hora.

A Ascensão do 9096Bet Sua Porta de Entrada para Apostas Online

Variedade de Apostas

Uma das grandes vantagens do 9096Bet é a diversidade de opções de apostas disponíveis. Entre as principais categorias, podemos destacar:

  • Apostas Esportivas: A plataforma disponibiliza uma extensa gama de esportes, incluindo futebol, basquete, tênis, e muito mais. Os usuários podem apostar em jogos ao vivo e eventos futuros, com cotações que variam conforme a dinâmica das partidas.
  • Jogos de Cassino: O cassino do 9096Bet é um dos mais completos, com uma variedade de jogos de mesa, slots e jogos com dealers ao vivo. Os gráficos sofisticados e a jogabilidade envolvente fazem com que os jogadores se sintam como se estivessem em um cassino físico.
  • Apostas em E-sports: O fenômeno dos e-sports não passa despercebido, e o 9096Bet oferece uma seção dedicada a apostas em competições de jogos eletrônicos, permitindo que os fãs desse universo participem das apostas.

Vantagens de Usar o 9096Bet

Ao escolher o 9096Bet para suas apostas, diversos benefícios se destacam:

  • Interface Amigável: A plataforma foi projetada com o usuário em mente, oferecendo uma interface limpa e acessível. Isso facilita a navegação e a realização de apostas, mesmo para iniciantes.
  • Segurança e Confiabilidade: O 9096Bet prioriza a segurança dos seus usuários, utilizando tecnologia de criptografia de ponta para proteger os dados e transações. Além disso, a plataforma opera dentro das regulamentações necessárias, o que garante uma total transparência.
  • Promoções e Bônus: O 9096Bet oferece uma variedade de promoções e bônus que podem aumentar as chances dos apostadores e proporcionar mais diversão. Desde bônus de boas-vindas até promoções sazonais, há sempre algo novo para explorar.
A Ascensão do 9096Bet Sua Porta de Entrada para Apostas Online

Como Começar a Apostar no 9096Bet

Se você está interessado em experimentar o 9096Bet, o processo de inscrição é simples e direto. Aqui estão os passos para começar:

  1. Criação de Conta: Acesse o site do 9096Bet e clique em ‘Registrar’. Preencha as informações necessárias para criar sua conta.
  2. Depósito de Fundos: Após a criação da conta, faça o depósito inicial utilizando um dos métodos de pagamento disponíveis. O site aceita diversas opções, incluindo cartões de crédito e e-wallets.
  3. Escolha seu Jogo: Explore as diversas categorias de apostas e escolha aquela que mais lhe agrada. Se for uma aposta esportiva, você pode começar escolhendo um evento ao vivo ou programado.
  4. Apostar e Aproveitar: Coloque suas apostas e acompanhe os resultados. Com o 9096Bet, você pode viver a emoção das apostas em tempo real!

Considerações Finais

O 9096Bet se apresenta como uma das opções mais relevantes no universo das apostas online. Com uma oferta diversificada e uma experiência de usuário de alta qualidade, ele atende às necessidades de diferentes perfis de apostadores. A combinação de segurança, praticidade e uma vasta gama de opções faz do 9096Bet uma escolha inteligente para quem busca entreter-se e, possivelmente, lucrar com apostas.

Se você ainda não experimentou, agora é a hora! Visite o 9096Bet e descubra tudo o que a plataforma tem a oferecer.

The post A Ascensão do 9096Bet Sua Porta de Entrada para Apostas Online appeared first on Anh Vũ Miner.

]]>
https://anhvuminer.com.vn/a-ascensao-do-9096bet-sua-porta-de-entrada-para.html/feed 0