• 关于

    function(){}()

    的搜索结果

问题

计时器里面的参数time为什么停留在初始值?

小旋风柴进 2019-12-01 19:33:32 808 浏览量 回答数 1

问题

jquery $when 多个异步怎么变同步?

小旋风柴进 2019-12-01 19:37:22 1331 浏览量 回答数 1

问题

关于zTree插件删除节点的问题

a123456678 2019-12-01 20:21:28 1243 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

关于jquery toggle()切换两个函数时报错问题

吴孟桥 2019-12-01 19:36:58 1282 浏览量 回答数 1

回答

$(document).keydown(function (event) { if (event.keyCode == 13) { btnClick(); } }); $(function () { $("#LoginId").focus(function () { LoginIdFocus(); }); $("#LoginId").blur(function () { checkLoginId(); }); $("#LoginPwd").focus(function () { LoginPwdFocus(); }); $("#LoginPwd").blur(function () { checkLoginPwd(); }); $("#btnLogin").click(function () { btnClick(); }); });

a123456678 2019-12-02 03:09:03 0 浏览量 回答数 0

回答

对Jquery写扩展的方法: // 扩展方法 禁止被编辑的字段 $.extend($.fn.datagrid.methods, { addEditor : function(jq, param) { if (param instanceof Array) { $.each(param, function(index, item) { var e = $(jq).datagrid('getColumnOption', item.field); e.editor = item.editor; }); } else { var e = $(jq).datagrid('getColumnOption', param.field); e.editor = param.editor; } }, removeEditor : function(jq, param) { if (param instanceof Array) { $.each(param, function(index, item) { var e = $(jq).datagrid('getColumnOption', item); e.editor = {}; }); } else { var e = $(jq).datagrid('getColumnOption', param); e.editor = {}; } } }); $.extend($.fn.datagrid.defaults.editors, { text: { init: function(container, options){ var input = $('<input type="text" class="datagrid-editable-input">').appendTo(container); return input; }, getValue: function(target){ return $(target).val(); }, setValue: function(target, value){ $(target).val(value); }, resize: function(target, width){ var input = $(target); if ($.boxModel == true){ input.width(width - (input.outerWidth() - input.width())); } else { input.width(width); } } } }); 这请求发出去,加载数据前触发。如果返回false,加载数据动作则退出 onBeforeLoad : function(data){ if($("#isUpdatePrice").val()=="Y"){//动态传值进行判断 $('div[identifier='+thatId+']').find('table#innerdatagrid-l').datagrid('addEditor', { field : 'price', editor : { type : 'numberbox', options : { required : true } } }); } } 1:$('div[identifier='+thatId+']').find('table#innerdatagrid-l')//获取<tble id="innerdatagrid-l"> .datagrid('addEditor', field : 'price', editor : { type : 'numberbox', options : { required : true } } ); 第一个参数“addEditor”表示调用设置编辑的方法 第二个参数“price”表示{field:'price', title:'订货批价', width:80, align:'center'} 第三个参数editor : { type : 'numberbox', options : { required : true } }

a123456678 2019-12-02 03:04:51 0 浏览量 回答数 0

回答

先回答你的问题:jQuery.extend({pluginname: function() {}})和jQuery.pluginname = function() {}没有什么区别,都是去扩展了jQuery本身,也就是$对象,只是前者会在定义多个plugin时方便点:// without jQuery.extend() jQuery.pluginA = function() {}; jQuery.pluginB = function() {}; jQuery.pluginC = function() {}; // with jQuery.extend() jQuery.extend({ pluginA: function() {}, pluginB: function() {}, pluginC: function() {} }); 其实这个和模拟类时怎样扩展prototype是一样的: 全选复制放进笔记// 有人这么写 function ClassA() {} ClassA.prototype.funcA = function() {}; ClassB.prototype.funcB = function() {}; // 也有人这么写 function ClassB() {} ClassB.prototype = { constructor: ClassB, funcA: function() {}, funcB: function() {} };

a123456678 2019-12-02 02:05:26 0 浏览量 回答数 0

问题

要设计一个可以左右控制的轮播图,在左右控制按钮上不知如何处理逻辑,用的是JQ

杨冬芳 2019-12-01 20:08:18 1169 浏览量 回答数 1

回答

(function ($, h, c) { var a = $([]), e = $.resize = $.extend($.resize, {}), i, k = "setTimeout", j = "resize", d = j + "-special-event", b = "delay", f = "throttleWindow"; e[b] = 250; e[f] = true; $.event.special[j] = { setup: function () { if (!e[f] && this[k]) { return false } var l = $(this); a = a.add(l); $.data(this, d, { w: l.width(), h: l.height() }); if (a.length === 1) { g() } }, teardown: function () { if (!e[f] && this[k]) { return false } var l = $(this); a = a.not(l); l.removeData(d); if (!a.length) { clearTimeout(i) } }, add: function (l) { if (!e[f] && this[k]) { return false } var n; function m(s, o, p) { var q = $(this), r = $.data(this, d); r.w = o !== c ? o : q.width(); r.h = p !== c ? p : q.height(); n.apply(this, arguments) } if ($.isFunction(l)) { n = l; return m } else { n = l.handler; l.handler = m } } }; function g() { i = h[k](function () { a.each(function () { var n = $(this), m = n.width(), l = n.height(), o = $.data(this, d); if (m !== o.w || l !== o.h) { n.trigger(j, [o.w = m, o.h = l]) } }); g() }, e[b]) } })(jQuery, this);

a123456678 2019-12-02 03:06:56 0 浏览量 回答数 0

回答

#nav { position: sticky; top: 0; } 最完美的解決方案。 可惜目前瀏覽器支持還不太好。 所以附上一個 polyfill: var Sticky = function() { var s = [], support = (function testSupport() { var div = document.createElement("div"); var st = ["sticky", "-webkit-sticky"]; return st.some(function(x) { div.style.position = x; return div.style.position === x; }); }()); function Sticky(o) { var self = this; s.push(self); self[0] = o; var placeholder = document.createElement("div"); self.placeholder = placeholder; placeholder.classList.add("placeholder"); self.fixed = false; self.posit = posit; function posit() { var rect; if (self.fixed) { rect = placeholder.getBoundingClientRect(); self.staticTop = rect.top + window.pageYOffset; } else { rect = o.getBoundingClientRect(); self.staticTop = rect.top + window.pageYOffset; } } posit(); } Sticky.prototype.stick = function() { if (support) return; var o = this[0], top = this.staticTop; var placeholder = this.placeholder, fixed = this.fixed; console.log(top); if (top > window.pageYOffset && fixed) { placeholder.parentNode.removeChild(placeholder); o.classList.remove("sticky"); fixed = false; } else if (top <= window.pageYOffset && !fixed) { o.parentNode.insertBefore(placeholder, o); o.classList.add("sticky"); fixed = true; } this.fixed = fixed; }; if (!support) { window.addEventListener("scroll", function() { s.forEach(function(x) { x.stick(); }); }); window.addEventListener("resize", function() { s.forEach(function(x) { x.posit(); }); s.forEach(function(x) { x.stick(); }); }); } else { console.log("support"); } return Sticky; }(); 使用方法:new Sticky(document.querySelector("#nav"));

a123456678 2019-12-02 02:23:15 0 浏览量 回答数 0

回答

jQuery 1.8之后就不支持事件的切换,仅用来元素的隐藏与显示。不过,可以通过自己写代码实现。1.通过flag来控制执行执行哪个函数。比如执行fn1时,flag置为true;执行fn2时,flag置为false.2.通过给元素加减class来控制那个函数。和方法1类型。3.代码实现toggle,避免方法1和方法2中添加变量和操作dom,毕竟这两个都需要开销,原理类似于递归调用,代码如下。$('#btn').one('click', function(){ handler1();//第一次已经是click了,所以需要先执行一次handler1 setTimeout(fn1, 200);//防止后面定义的事件被触发。 }); function fn1(){ var obj = $(this); obj.one('click',function(){ handler2(); fn2(obj); }); } function fn2(obj){ obj.one('click',function(){ handler1(); fn1(obj); }); } function handler1(){ console.log('11'); } function handler2(){ console.log('22'); }当然为了使用方便,也可以封装成jQuery插件的模式。 $.fn.toggleEx = function(handler1, handler2){ $(this).one('click', function(){ handler1(); setTimeout(fn1, 200);//防止后面定义的事件被触发。 }); function fn1(){ var obj = $(this); obj.one('click',function(){ handler2(); fn2(obj); }); } function fn2(obj){ obj.one('click',function(){ handler1(); fn1(obj); }); } } //使用方式和之前一样。 $('#btn').toggleEx(function(){ console.log('11'); }, function(){ console.log('22');

小旋风柴进 2019-12-02 02:28:33 0 浏览量 回答数 0

回答

var Speed_1 = 10; //速度(毫秒) var Space_1 = 24; //每次移动(px) var PageWidth_1 = 128 * 6; //翻页宽度 var interval_1 = 6000; //翻页间隔时间 var fill_1 = ; //整体移位 var MoveLock_1 = false; var MoveTimeObj_1; var MoveWay_1="right"; var Comp_1 = ; var AutoPlayObj_1=null; function GetObj(objName){if(document.getElementById){return eval('document.getElementById("'+objName+'")')}else{return eval('document.all.'+objName)}} function AutoPlay_1(){clearInterval(AutoPlayObj_1);AutoPlayObj_1=setInterval('ISL_GoDown_1();ISL_StopDown_1();',interval_1)} function ISL_GoUp_1(){if(MoveLock_1)return;clearInterval(AutoPlayObj_1);MoveLock_1=true;MoveWay_1="left";MoveTimeObj_1=setInterval('ISL_ScrUp_1();',Speed_1);} function ISL_StopUp_1(){if(MoveWay_1 == "right"){return};clearInterval(MoveTimeObj_1);if((GetObj('ISL_Cont_1').scrollLeft-fill_1)%PageWidth_1!=){Comp_1=fill_1-(GetObj('ISL_Cont_1').scrollLeft%PageWidth_1);CompScr_1()}else{MoveLock_1=false} AutoPlay_1()} function ISL_ScrUp_1(){if(GetObj('ISL_Cont_1').scrollLeft<=){GetObj('ISL_Cont_1').scrollLeft=GetObj('ISL_Cont_1').scrollLeft+GetObj('List1_1').offsetWidth} GetObj('ISL_Cont_1').scrollLeft-=Space_1} function ISL_GoDown_1(){clearInterval(MoveTimeObj_1);if(MoveLock_1)return;clearInterval(AutoPlayObj_1);MoveLock_1=true;MoveWay_1="right";ISL_ScrDown_1();MoveTimeObj_1=setInterval('ISL_ScrDown_1()',Speed_1)} function ISL_StopDown_1(){if(MoveWay_1 == "left"){return};clearInterval(MoveTimeObj_1);if(GetObj('ISL_Cont_1').scrollLeft%PageWidth_1-(fill_1>=?fill_1:fill_1+1)!=){Comp_1=PageWidth_1-GetObj('ISL_Cont_1').scrollLeft%PageWidth_1+fill_1;CompScr_1()}else{MoveLock_1=false} AutoPlay_1()} function ISL_ScrDown_1(){if(GetObj('ISL_Cont_1').scrollLeft>=GetObj('List1_1').scrollWidth){GetObj('ISL_Cont_1').scrollLeft=GetObj('ISL_Cont_1').scrollLeft-GetObj('List1_1').scrollWidth} GetObj('ISL_Cont_1').scrollLeft+=Space_1} function CompScr_1(){if(Comp_1==){MoveLock_1=false;return} var num,TempSpeed=Speed_1,TempSpace=Space_1;if(Math.abs(Comp_1)<PageWidth_1/2){TempSpace=Math.round(Math.abs(Comp_1/Space_1));if(TempSpace<1){TempSpace=1}} if(Comp_1<){if(Comp_1<-TempSpace){Comp_1+=TempSpace;num=TempSpace}else{num=-Comp_1;Comp_1=} GetObj('ISL_Cont_1').scrollLeft-=num;setTimeout('CompScr_1()',TempSpeed)}else{if(Comp_1>TempSpace){Comp_1-=TempSpace;num=TempSpace}else{num=Comp_1;Comp_1=} GetObj('ISL_Cont_1').scrollLeft+=num;setTimeout('CompScr_1()',TempSpeed)}} function picrun_ini(){ GetObj("List2_1").innerHTML=GetObj("List1_1").innerHTML; GetObj('ISL_Cont_1').scrollLeft=fill_1>=?fill_1:GetObj('List1_1').scrollWidth-Math.abs(fill_1); GetObj("ISL_Cont_1").onmouseover=function(){clearInterval(AutoPlayObj_1)} GetObj("ISL_Cont_1").onmouseout=function(){AutoPlay_1()} AutoPlay_1(); } </script>

a123456678 2019-12-02 03:10:28 0 浏览量 回答数 0

回答

这是因为我之前有加一个样式的属性在里面,上传的时候忘记去掉了,现在代码已重新上传。 $.fn.xslt = function(xml, xslt, addStyle, callback) { //这里多了个参数addStyle 去掉就好了,或者复制以下代码 (function($) { $.fn.xslt = function() { return this; } var str = /^\s*</; if (document.recalc) { // IE 5+ $.fn.xslt = function(xml, xslt, callback) {//, callback var target = $(this); var xm = new ActiveXObject("Microsoft.XMLDOM"); xm.async = false; xm.loadXML(xml); $.get(xslt, function(data) { target.html(xm.transformNode(data)); if(typeof(callback) === 'function' ) callback.apply(this); }); return this; }; } else if ($.browser.msie && $.browser.version == "9.0") { //IE9 $.fn.xslt = function(xml, xslt, callback) { if (window.ActiveXObject) { var target = $(this); var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0"); //裝載數據 xmlDoc.async = false; xmlDoc.loadXML(xml); //裝載樣式 var xslDoc = new ActiveXObject("Msxml2.DOMDocument.6.0"); xslDoc.async = false; xslDoc.resolveExternals = false; xslDoc.load(xslt); target.html(xmlDoc.transformNode(xslDoc)); if(typeof(callback) === 'function' ) callback.apply(this); } return this; }; } else if (window.DOMParser != undefined && window.XMLHttpRequest != undefined && window.XSLTProcessor != undefined) { // Mozilla 0.9.4+, Opera 9+ var processor = new XSLTProcessor(); var support = false; if ($.isFunction(processor.transformDocument)) { support = window.XMLSerializer != undefined; } else { support = true; } if (support) { $.fn.xslt = function(xml, xslt, callback) { var target = $(this); var transformed = false; var xm = { readyState: 4 }; var xs = { readyState: 4 }; var change = function() { if (xm.readyState == 4 && xs.readyState == 4 && !transformed) { var processor = new XSLTProcessor(); if ($.isFunction(processor.transformDocument)) { // obsolete Mozilla interface resultDoc = document.implementation.createDocument("", "", null); processor.transformDocument(xm.responseXML, xs.responseXML, resultDoc, null); target.html(new XMLSerializer().serializeToString(resultDoc)); } else { processor.importStylesheet(xs.responseXML); resultDoc = processor.transformToFragment(xm.responseXML, document); target.empty().append(resultDoc); } transformed = true; if(typeof(callback) === 'function' ) callback.apply(this); } }; if (str.test(xml)) { xm.responseXML = new DOMParser().parseFromString(xml, "text/xml"); } else { xm = $.ajax({ dataType: "xml", url: xml }); xm.onreadystatechange = change; } if (str.test(xslt)) { xs.responseXML = new DOMParser().parseFromString(xslt, "text/xml"); change(); } else { xs = $.ajax({ dataType: "xml", url: xslt }); xs.onreadystatechange = change; } return this; }; } } })(jQuery);

a123456678 2019-12-02 03:04:21 0 浏览量 回答数 0

回答

1、jsonp必须遵循一个固定的格式。即请求的URL的search中必须存在一个jsonpcallback=functionName;响应的格式为functionName(/ json data /); 原理就是利用script不受同源策略限制的特点。2、在server返回数据之后,尽量删掉这个script。因为页面中有n多个jsonp,就会有n多个生成的script标签。造成dom臃肿。并且别人也可以通过观察html来指导你jsonp的请求细节。3、是看重写的mimeType是不是和server返回的一样。如果一样就没必要重写mimeType了。除此之外还用了setRequestHeader、overriderMimeType、abort等方法。4、看代码流程即可。我写了一个简单点的例子 (function (global) { // 防止低版本ie里,undefined被重写 var undefined = void(0); // 定义命名空间 var namespace = {}; // 默认的参数列表 var defaultOptions = { // ajax请求的路径是什么 url: '', // 往服务器发送的数据 data: '', // 使用什么http方法 type: 'get', // ajax请求方式,同步还是异步。默认为异步 async: true, // 成功时执行的函数 success: function (data) { }, // 失败时执行的函数 error: function (errInfo) { }, // 自定义请求首部列表 header: {}, // 重写的mimeType overrideMimeType: '', // 是否走缓存 cache: false, // 超时毫秒数。默认为0 表示不执行超时逻辑 timeout: 0, // 是否格式化参数为uri string processData: true, // 请求的mime类型 默认为表单提交 contentType: 'application/x-www-form-urlencoded', // 返回的数据格式 text|json dataType: 'text' }; /** * CORE * @param {Object} options 用户输入的参数 * @throw TypeError */ var ajax = function (options) { // 判断参数是否为对象,如果不是则抛出类型错误 if (!tool.isObject(options)) { throw new TypeError('参数类型错误'); } // 合并用户输入的参数列表和默认的参数列表 返回一个全新的参数列表对象 var userOptions = tool.extend(defaultOptions, options); // ajax第一步:获取ajax对象 var xhr = tool.getXHR(); // 1、如果是get系 需要把data拼接到url后面 if (/^(get|delete|head)$/img.test(userOptions.type)) { var data = tool.encodeToURIString(userOptions.data); userOptions.url = tool.hasSearch(userOptions.url, data); // 因为get系不需要传send参数,所以设置为null userOptions.data = null; } // 2、是否走缓存,如果不走缓存则在url后面加一个随机数来防止缓存 if (userOptions.cache === false) { // 因为search是有固定格式的 key=value 如果只写一个value是不合法的,所以必须构造一个key,而且这个key不能和已有的key重复 var random = '_=' + (Math.random() * 0xffffff).toFixed(0); userOptions.url = tool.hasSearch(userOptions.url, random); } // ajax操作第二步 xhr.open(userOptions.type, userOptions.url, userOptions.async); // 2.1 设置自定义请求首部信息 if (userOptions.header && tool.isObject(userOptions.header)) { tool.eachObject(userOptions.header, function (key, value) { xhr.setRequestHeader(key, value); }) } // 2.2 设置content-type http里表现mimeType的字段就是content-type // 设置请求的mimeType if (userOptions.contentType && tool.isString(userOptions.contentType)) { xhr.setRequestHeader('content-type', userOptions.contentType); } // 2.3 设置重写的mime类型 // 设置响应的mimeType if (userOptions.overrideMimeType && tool.isString(userOptions.overrideMimeType)) { xhr.overrideMimeType(userOptions.overrideMimeType); } // 2.4 判断是否执行超时逻辑 if (tool.isNumber(userOptions.timeout) && userOptions.timeout > 0) { xhr.timeout = userOptions.timeout; // 标准浏览器 if ('ontimeout' in xhr) { xhr.ontimeout = function () { userOptions.error('timeout'); } } else { // 低版本ie setTimeout(function () { // http的事务是否还没有完成 if (xhr.readyState !== 4) { // 强制终止http事务 xhr.abort(); } }, xhr.timeout); } } // 2.5 是否需要处理给服务器发送的数据,判断processData是否为true // 当给服务器发送的数据为二进制或者formData的时候,不需要处理这个数据 // 要把processData设置为false if (/^(post|put)$/igm.test(userOptions.type) && userOptions.processData === true) { userOptions.data = tool.encodeToURIString(userOptions.data); } // ajax第三步:接收响应 xhr.onreadystatechange = function () { // http的事务是否完成 if (xhr.readyState === 4) { // 获取响应主体 var responseText = xhr.responseText; // 判断状态码是否成功 if (/^2\d{2}$/.test(xhr.status)) { // 判断是否需要把响应主体格式化为json对象 if (userOptions.dataType === 'json') { // 因为不合法的json字符串无法转换为json对象,会出异常 try { responseText = tool.JSONParse(responseText); } catch (ex) { userOptions.error(ex); return; } } userOptions.success(responseText); // R如果响应码是错误的类型 } else if (/^(4|5)\d{2}$/.test(xhr.status)) { // 直接执行error userOptions.error(xhr.status); } } }; // ajax第四步:发送 xhr.send(userOptions.data); }; /** * 利用闭包,实现获取数据类型 * @param {string} type 数据类型 * @returns {Function} */ var getType = function (type) { return function (obj) { // 为什么要用Object.prototype.toString来判断类型? return Object.prototype.toString.call(obj) === '[object ' + type + ']'; } }; var tool = { /** * 利用惰性函数,实现获取ajax对象的方法 */ getXHR: (function () { var list = [function () { return new XMLHttpRequest; }, function () { return new ActiveXObject('Microsoft.XMLHTTP'); }, function () { return new ActiveXObject("Msxml2.XMLHTTP"); }, function () { return new ActiveXObject("Msxml3.XMLHTTP"); }]; var len = list.length; var xhr = null; while (len--) { try { list[len](); xhr = list[len]; break; } catch (ex) { continue; } } if (xhr !== null) { return xhr; } throw new Error('当前浏览器不支持此方法'); })(), /** * 合并多个对象 * @returns {{}} 合并后的对象 */ extend: function () { // 因为参数长度不固定,所以把参数列表转成数组 // var params = [].slice.call(arguments, 0); var voidObj = {}; this.each(arguments, function (item) { // item为每一个参数对象 tool.eachObject(item, function (key, value) { voidObj[key] = value; }); }); return voidObj; }, /** * 循环帮助函数,利用惰性函数 */ each: (function () { if ([].forEach) { return function (list, callback, context) { [].forEach.call(list, callback, context); } } return function (list, callback, context) { for (var i = 0, j = list.length; i < j; i++) { callback.call(context, list[i], i, list); } } })(), /** * 循环对象 * @param {Object} obj 要循环的对象 * @param {Function} callback 回调函数 * @param {Object|undefined} context 回调函数里头的上下文对象 */ eachObject: function (obj, callback, context) { for (var n in obj) { if (!obj.hasOwnProperty(n)) continue; callback.call(context, n, obj[n]); } }, /** * 给tool动态添加判断数据类型的方法 */ init: function () { this.each(['Object', 'Function', 'Array', 'String', 'Number'], function (item) { tool['is' + item] = getType(item); }) }, /** * 把一个对象格式化为uri string * @param {*} data 需要格式化的数据 * @return {string} 格式化之后得到的uri string */ encodeToURIString: function (data) { if (this.isString(data)) return data; if (!this.isObject(data)) return ''; var arr = []; this.eachObject(data, function (key, value) { arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); }); return arr.join('&'); }, /** * 往url后面拼接参数的方法 * @param {string} url url * @param {string} padString 要拼接的参数 * @returns {string} 拼接之后的url */ hasSearch: function (url, padString) { if (!padString) return url; // 如果有问号,说明url里已经有参数了,因为参数和参数之间用&来分隔 /*if (/\?/.test(url)) { return url + '&' + padString; } else { return url + '?' + padString; }*/ return url + (/\?/.test(url) ? '&' : '?') + padString; }, /** * 把json字符串格式化为json对象 * @param {string} jsonString json字符串 * @return {Object} json对象 */ JSONParse: function (jsonString) { if (window.JSON) { return JSON.parse(jsonString) } return eval('(' + jsonString + ')'); } }; tool.init(); // 把ajax方法放入命名空间中 namespace.ajax = ajax; tool.each(['get', 'post'], function (item) { /** * 动态添加get和post方法 * @param {string} url 请求的url * @param {Object} data 往服务器发送的数据 * @param {Function} callback 成功的回调函数 * @param {string} dataType 数据格式 */ namespace[item] = function (url, data, callback, dataType) { ajax({ url: url, type: item, data: data, success: callback, dataType: dataType }); } }); // 先把全局里已经存在的x先放到一边 var globalX = global.x; /** * 解决全局变量名冲突 * @param {string|undefined} symbol 更改的全局变量名 * @returns {Object} */ namespace.noConflict = function (symbol) { if (symbol && tool.isString(symbol)) { window[symbol] = namespace; } global!==undefined&&(window.x = globalX); return namespace; }; // 暴露到全局环境中 global.x = namespace; })(this); 用法和jquery的一样。不过我暴露的是x变量,不是$.

小旋风柴进 2019-12-02 02:28:33 0 浏览量 回答数 0

问题

jquery 关于Deferred方法的疑问?

小旋风柴进 2019-12-01 19:37:23 764 浏览量 回答数 1

回答

<!doctype html> <html> <head> <meta charset='UTF-8'> </head> <body> <div class='test'></div> <script type="text/javascript"> function encrypt(data, keyJSON){ var data = new TextEncoder("UTF-8").encode(data); var randomsKeys = geneRandomHexStr(64); // 128 bit keys var encryptedKey = hexStringToUint8Array(randomsKeys); var aesAlgo = {name: 'aes-cbc', iv: hexStringToUint8Array("000102030405060708090a0b0c0d0e0f")}; return crypto.subtle.importKey("jwk", keyJSON, {name: "rsa-oaep", hash: {name: "sha-256"}},true, ['encrypt']) .then(function(publicKey){ return crypto.subtle.encrypt({name: "rsa-oaep"}, publicKey, encryptedKey); }).then(function(res){ encryptedKey = bytesToHexString(res) // use aes to encrypt data // import aes key return crypto.subtle.importKey('raw', hexStringToUint8Array(randomsKeys) , aesAlgo, false, ['encrypt', 'decrypt']); }).then(function(result){ // use aes to encode return crypto.subtle.encrypt(aesAlgo, result, data); }).then(function(encryptedData){ return Promise.resolve({ 'encrypted': bytesToHexString(encryptedData), 'encryptedKey': encryptedKey, }); }); //console.log(new TextDecoder("UTF-8").decode(data)); // use server public key to encrypt } function decrypt(data, keyJSON){ // use local private key to decrypt var encryptedKey = new hexStringToUint8Array(data.encryptedKey); var encryptedData = new hexStringToUint8Array(data.encrypted); var aesAlgo = {name: 'aes-cbc', iv: hexStringToUint8Array("000102030405060708090a0b0c0d0e0f")}; // decrypt key return crypto.subtle.importKey('jwk', keyJSON, {name: "rsa-oaep", hash: {name: "sha-256"}}, true, ['decrypt']).then(function(privateKey){ return crypto.subtle.decrypt({name: 'rsa-oaep'}, privateKey, encryptedKey); }).then(function(decryptedKey){ // import aes key return crypto.subtle.importKey('raw', decryptedKey, aesAlgo, false, ['encrypt', 'decrypt']); }).catch(function(){ console.error("decrypt error"); }).then(function(result){ // decode encrypted data return crypto.subtle.decrypt(aesAlgo, result, encryptedData); }).then(function(data){ return Promise.resolve(new TextDecoder("UTF-8").decode(new Uint8Array(data))); }) } function createNewUserKey(){ var algorithmKeyGen = { name: "RSA-OAEP", hash: {name: "sha-256"}, // RsaKeyGenParams modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // Equivalent to 65537 }; var nonExtractable = false; var publicKey = ""; var privateKey = ""; var keyPairs = ""; return crypto.subtle.generateKey(algorithmKeyGen, true, ['encrypt', 'decrypt']).then(function(result) { // gene key pair keyPairs = result; return Promise.all([crypto.subtle.exportKey("jwk", keyPairs.publicKey), crypto.subtle.exportKey("jwk", keyPairs.privateKey)]); }) } function _arrayBufferToBase64( buffer ) { var binary = ''; var bytes = new Uint8Array( buffer ); var len = bytes.byteLength; for (var i = 0; i < len; i++) { binary += String.fromCharCode( bytes[ i ] ); } return window.btoa( binary ); } function hexStringToUint8Array(hexString) { if (hexString.length % 2 != 0) throw "Invalid hexString"; var arrayBuffer = new Uint8Array(hexString.length / 2); for (var i = 0; i < hexString.length; i += 2) { var byteValue = parseInt(hexString.substr(i, 2), 16); if (byteValue == NaN) throw "Invalid hexString"; arrayBuffer[i/2] = byteValue; } return arrayBuffer; } function bytesToHexString(bytes) { if (!bytes) return null; bytes = new Uint8Array(bytes); var hexBytes = []; for (var i = 0; i < bytes.length; ++i) { var byteString = bytes[i].toString(16); if (byteString.length < 2) byteString = "0" + byteString; hexBytes.push(byteString); } return hexBytes.join(""); } function geneRandomHexStr(length){ var text = ""; var possible = "0123456789abcdef"; for( var i=0; i < length; i++ ) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; } createNewUserKey().then(function(keyPairs){ encrypt("this is origin text", keyPairs[0]).then(function(res){ console.log('public', JSON.stringify(keyPairs[0])); console.log('private', JSON.stringify(keyPairs[1])); decrypt(res, keyPairs[1]).then(function(decrypted){ console.log('decrypted', decrypted); }); }); }) </script> </body> </html>

小旋风柴进 2019-12-02 02:30:16 0 浏览量 回答数 0

回答

<input type="text" name="chaxun" id="chaxun"> <button id="button" onclick="search()">查询</button> <script src="jquery.js"></script> <script> var dataCount = 0; function search() { dataCount = 0; $('#chaxun').attr('readonly', 'readonly'); $('#button').attr('disabled', 'disabled'); ajax( 'post', 'mysql.php', null, function(response) { if (response.lenth > 0) { dataCount = response.length; for (var index in response) { completeData({chaxun: response[index]}); } } if (dataCount == 0) { $('#chaxun').removeAttr('readonly'); $('#button').removeAttr('disabled'); } }, error ); } function completeData(data) { ajax( 'post', 'demo.php', data, function(response) { if (dataCount > 0) { dataCount--; } }, error ); } function error(response) { if (response.status == 503) { alert('服务器超时,请稍后重试。'); } } function ajax(type, url, data, cbfOk, cbfError) { $.ajax({ type: type, url: url, async: false, data: data, dataType: 'json', success: function(response) { if (typeof cbfOK == 'function') { return cbfOk(response); } return true; }, error:function(response) { if (typeof cbfError == 'function') { return cbfError(response); } return false; } }); } </script>

a123456678 2019-12-02 03:04:48 0 浏览量 回答数 0

回答

var events = (function() { var topics = {}; return { // 注册监听函数 subscribe: function(topic, handler) { if (!topics.hasOwnProperty(topic)) { topics[topic] = []; } topics[topic].push(handler); }, // 发布事件,触发观察者回调事件 publish: function(topic, info) { if (topics.hasOwnProperty(topic)) { topics[topic].forEach(function(handler) { handler(info); }); } }, // 移除主题的一个观察者的回调事件 remove: function(topic, handler) { if (!topics.hasOwnProperty(topic)) return; var handlerIndex = -1; topics[topic].forEach(function(item, index) { if (item === handler) { handlerIndex = index; } }); if (handlerIndex >= 0) { topics[topic].splice(handlerIndex, 1); } }, // 移除主题的所有观察者的回调事件 removeAll: function(topic) { if (topics.hasOwnProperty(topic)) { topics[topic] = []; } } }; })();

剑曼红尘 2020-04-08 12:35:30 0 浏览量 回答数 0

回答

var mod = {}; (function(mod) { mod.func1 = function() { alert("func1"); } })(mod); (function(mod) { mod.func2 = function() { alert("func2"); } })(mod); (function($) { function func3() { mod.func1(); mod.func2(); alert("func3"); } func3(); })();

a123456678 2019-12-02 03:05:36 0 浏览量 回答数 0

回答

$(function(){ $('#dowebok').fullpage({ sectionsColor: ['#1bbc9b', '#4BBFC3', '#7BAABE', '#f90'], afterLoad: function(anchorLink, index){ if(index == 2){ $('.section2').find('p').delay(500).animate({ left: '0' }, 1500, 'easeOutExpo'); } if(index == 3){ $('.section3').find('p').delay(500).animate({ bottom: '0' }, 1500, 'easeOutExpo'); } if(index == 4){ $('.section4').find('p').fadeIn(2000); } }, onLeave: function(index, direction){ if(index == '2'){ $('.section2').find('p').delay(500).animate({ left: '-120%' }, 1500, 'easeOutExpo'); } if(index == '3'){ $('.section3').find('p').delay(500).animate({ bottom: '-120%' }, 1500, 'easeOutExpo'); } if(index == '4'){ $('.section4').find('p').fadeOut(2000); } } }); });

小旋风柴进 2019-12-02 02:23:05 0 浏览量 回答数 0

回答

var promise1 = someAjax(); //someFunction返回jq的jqxhr对象 var promise2 = promise1.then(function (data) { return ajax1(); //返回jq的jqxhr对象 return ajax2(); //返回jq的jqxhr对象 }, function (xhr) { // nothing here }); promise2.then(function (data) { // ajax1执行成功, // 和ajax2执行成功之后, // 我如何针对它俩进行不同的操作? }, function (xhr) { alert("error"); }); 也就是说,现在我们有两个问题。问题一(我原本的问题):我想在执行某个ajax之后,成功的话,执行ajax1,失败的话,执行ajax2,那么如何分别对ajax1和ajax2的后续进行操作?问题二(我追加的问题):我想在执行某个ajax之后,成功的话,执行ajax1和ajax2,那么如何分别对ajax1和ajax2的后续进行操作?在stackoverflow上面,这个回答给了我启发,是的,使用$.when()和$.Deferred()不废话,直接上代码。 解决问题一: // 为每一个ajax请求声明一个变量,并设为Deferred对象 // 这一步是必须的,而且必须在$.when前面 // 因为$.when的参数得是一个Deferred对象 var someAjaxDfd = $.Deferred(); var ajax1Dfd = $.Deferred(); var ajax2Dfd = $.Deferred(); // 这是程序主体 // 首先执行someAjax someAjax(someAjaxDfd); $.when(someAjaxDfd).then(function (data) {//这里的参数为什么是data,因为在下面的ajax函数中,我把data当成resolve()的参数传过来了 // someAjax完成之后,如果成功,执行ajax1 ajax1(ajax1Dfd); }, function (xhr) { //这里的参数为什么是xhr,因为在下面的ajax函数中,我把xhr当成reject()的参数传过来了 // 如果失败,执行ajax2 var data = {/* some data */}; ajax2(data, ajax2Dfd); }); $.when(ajax1Dfd).then(function (data) { // ajax1成功之后执行的命令 }, function (xhr) { // ajax1失败之后执行的命令 }); $.when(ajax2Dfd).then(function (data) { // ajax2成功之后执行的命令 }, function (xhr) { // ajax2失败之后执行的命令 }); // 这里是三个ajax函数声明 function someAjax(dfd) { $.ajax({ type: "GET", url: "/someajaxurl", contentType: "application/json", dataType: "json", success: function (data) { dfd.resolve(data); }, error: function (xhr) { dfd.reject(xhr); } }); } function ajax1(dfd) { $.ajax({ type: "GET", url: "/ajax1url", contentType: "application/json", dataType: "json", success: function (data) { dfd.resolve(data); }, error: function (xhr) { dfd.reject(xhr); } }); } function ajax2(data, dfd) { $.ajax({ type: "POST", url: "/ajax1url", contentType: "application/json", dataType: "json", data: JSON.stringify(data), success: function (data) { dfd.resolve(data); }, error: function (xhr) { dfd.reject(xhr); } }); } 所以我的思路的原理是,首先声明一个Deferred对象,然后把这个对象传入到ajax的函数里。如果success,那么传入的Deferred调用resolve()方法,如果error,那么传入的Deferred调用reject()方法。然后在程序中用$.when()监听这个Deferred对象,成功或失败,执行不同的指令。 所以解决问题二,和问题一大同小异: var someAjaxDfd = $.Deferred(); var ajax1Dfd = $.Deferred(); var ajax2Dfd = $.Deferred(); // 这是程序主体 // 首先执行someAjax someAjax(someAjaxDfd); $.when(someAjaxDfd).then(function (data) { // someAjax完成之后,如果成功,执行ajax1和ajax2 ajax1(ajax1Dfd); var data = {/* some data */}; ajax2(data, ajax2Dfd); }, function (xhr) { // nothing here }); $.when(ajax1Dfd).then(function (data) { // ajax1成功之后执行的命令 }, function (xhr) { // ajax1失败之后执行的命令 }); $.when(ajax2Dfd).then(function (data) { // ajax2成功之后执行的命令 }, function (xhr) { // ajax2失败之后执行的命令 }); 另外,如果ajax请求返回的json格式不对,即使status为200,$.ajax()也是会走到error的eventHandler里面的,这个要注意。

小旋风柴进 2019-12-02 02:26:31 0 浏览量 回答数 0

问题

fadeIn下拉菜单重复触发事件

小旋风柴进 2019-12-01 19:37:13 842 浏览量 回答数 1

回答

var isChinaMobile = /^134[0-8]d{7}$|^(?:13[5-9]|147|15[0-27-9]|178|18[2-478])d{8}$/; //移动 var isChinaUnion = /^(?:13[0-2]|145|15[56]|176|18[56])d{8}$/; //联通 var isChinaTelcom = /^(?:133|153|177|18[019])d{8}$/; // 电信 var isOtherTelphone = /^170([059])d{7}$/;//其他运营商 var utils = { checkMobile: function(telphone){ telphone = this.trim(telphone); if(telphone.length !== 11){ return this.setReturnJson(false, '未检测到正确的手机号码'); } else{ if(isChinaMobile.test(telphone)){ return this.setReturnJson(true, '移动', {name: 'ChinaMobile'}); } else if(isChinaUnion.test(telphone)){ return this.setReturnJson(true, '联通', {name: 'ChinaUnion'}); } else if(isChinaTelcom.test(telphone)){ return this.setReturnJson(true, '电信', {name: 'ChinaTelcom'}); } else if(isOtherTelphone.test(telphone)){ var num = isOtherTelphone.exec(telphone); return this.setReturnJson(true, '', {name: ''}); } else{ return this.setReturnJson(false, '未检测到正确的手机号码'); } } }, setReturnJson: function(status, msg, data){ if(typeof status !== 'boolean' && typeof status !== 'number'){ status = false; } if(typeof msg !== 'string'){ msg = ''; } return { 'status': status, 'msg': msg, 'data': data }; } }   <script type="text/javascript"> var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+d{8})$/;// 验证130-139,150-159,180-189号码段的手机号码 if(!myreg.test($("#phone").val())) { alert('请输入有效的手机号码!'); return false; } </script> function validatemobile(mobile) { if(mobile.length==0) { alert('请输入手机号码!'); document.form1.mobile.focus(); return false; } if(mobile.length!=11) { alert('请输入有效的手机号码!'); document.form1.mobile.focus(); return false; } var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+d{8})$/; if(!myreg.test(mobile)) { alert('请输入有效的手机号码!'); document.form1.mobile.focus(); return false; } }

小旋风柴进 2019-12-02 02:16:17 0 浏览量 回答数 0

问题

fadeIn下拉菜单重复触发事件

杨冬芳 2019-12-01 19:54:12 716 浏览量 回答数 1

问题

在mongodb中保存第二条数据时报错E11000 duplicate key ?400报错

爱吃鱼的程序员 2020-06-07 17:44:13 0 浏览量 回答数 1

问题

怎样将”顺序“和”反序“两个按钮合并成一个按钮,点击一下是顺序 再点击是反序?!

a123456678 2019-12-01 20:19:47 849 浏览量 回答数 1

问题

封装了一个渐隐渐现的轮播图组件,请问如何解决 第一次切换效果不正确?

小旋风柴进 2019-12-01 19:34:01 1108 浏览量 回答数 1

问题

nodejs中css,js加载的问题,报错如图,用了fs.readFile就没事了,为啥?

a123456678 2019-12-01 20:14:48 831 浏览量 回答数 1

问题

nodejs中css,js加载的问题,报错如图,用了fs.readFile就没事了,为啥?

a123456678 2019-12-01 20:14:46 2297 浏览量 回答数 1

回答

当作Object中的元素,比如{0:Element, 1:Element...}, 可以运行下面这段代码查看: var ps = $("p"); console.log(typeof ps); console.log("--------"); for(var item in ps) { console.log(item+" "+(typeof ps[item])+" "+ps[item]); } 部分输出结果: object -------- 0 object [object HTMLParagraphElement] 1 object [object HTMLParagraphElement] 2 object [object HTMLParagraphElement] 3 object [object HTMLParagraphElement] 4 object [object HTMLParagraphElement] length number 5 prevObject object [object Object] context object [object HTMLDocument] selector string p jquery string 1.11.0 constructor function function (a,b){return new n.fn.init(a,b)} toArray function function (){return d.call(this)} get function function (a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)} pushStack function function (a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b} each function function (a,b){return n.each(this,a,b)} map function function (a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))} slice function function (){return this.pushStack(d.apply(this,arguments))} first function function (){return this.eq(0)} last function function (){return this.eq(-1)} eq function function (a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])} end function function (){return this.prevObject||this.constructor(null)} push function function push() { [native code] } sort function function sort() { [native code] } splice function function splice() { [native code] } extend function function (){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g} find function function (a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c} filter function function (a){return this.pushStack(x(this,a||[],!1))} not function function (a){return this.pushStack(x(this,a||[],!0))} is function function (a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length} init function function (a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))} has function function (a){var b,c=n(a,this),d=c.length;

a123456678 2019-12-02 03:07:34 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站