Tag: jQuery

改变散列而不触发hashchange事件

我正在使用哈希dynamic加载内容。 为了使后退button工作,我正在捕获哈希更改。 但有时我需要更改散列而不触发散列更改函数(例如,当页面被redirect到服务器端,并且在内容返回时我需要更新散列)。 我提出的最好的解决scheme是取消绑定hashchange事件,进行更改,然后重新绑定它。 然而,由于这是asynchronous发生的,我发现它重新绑定的速度太快,而且还能捕捉到哈希值的变化。 目前我的解决scheme非常差:以setTimeout重新绑定。 有没有人有更好的主意? $(window).unbind( 'hashchange', hashChanged); window.location.hash = "!" + url; setTimeout(function(){ $(window).bind( 'hashchange', hashChanged); }, 100); 编辑: Amir Raminfar的build议促使我提出了一个不需要超时的解决scheme。 我添加了一个类variables _ignoreHashChange = false; 当我想默默地改变哈希值时,我这样做: _ignoreHashChange = true; window.location.hash = "!" + url; 和哈希改变事件做到这一点: function hashChanged(event){ if(_ignoreHashChange === false){ url = window.location.hash.slice(2); fetchContent(url); } _ignoreHashChange = false; }

使用Javascript从加载的iframe中检索HTTP状态代码

我使用jQuery Form插件进行asynchronous表单提交。 对于包含文件的表单,它将表单复制到一个隐藏的iframe,提交它,然后复制iframe的内容。 问题是,我无法弄清楚如何find服务器返回的HTTP状态码。 例如,如果服务器返回404,则iframe中的数据将被正常复制并作为常规响应处理。 我试过在iframe对象中寻找某种status_code属性,但一直没有find类似的东西。 $.ajax()函数不能使用,因为它不支持上传文件。 我知道的asynchronous上传文件的唯一方法是使用隐藏的iframe方法。

记住ajax添加数据时按下返回button

我有一个search页面,每个search结果被添加到AJAX页面。 这样,我可以让用户search例如Led Zeppelin ,然后再次searchMetallica,但将其添加到与之前的search相同的结果列表中。 我的问题是,当用户点击一个链接到一条logging,然后点击返回button,回到search结果。 FireFox(7)保留页面,当我离开它时,显示完整的结果。 另一方面, IE(7,8)和Chrome(15)将显示在添加AJAX之前的任何search结果的页面,就好像它不记得我向其中添加数据。 以下是我使用的代码。 我试图添加location.hash = "test"; 但似乎没有工作。 // Add search result $("#searchForm").submit(function (event) { //location.hash = "test"; event.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function (data) { $("tbody").append(data); }); }); 我不需要一个后退button,可以跟踪search页面上的更改,例如逐个添加不同的search结果。 我只想让浏览器记住最后的search结果,当我点击后退button。 解决了 更改为document.location.hash = "latest search"没有改变任何东西。 埃米尔指出,我必须使用localStorage 。 这进入了其余的jQuery代码: // Replace the search result table on load. if (('localStorage' in window) && […]

从contentEditable div中提取文本

我有一个div设置为contentEditable和“ white-space:pre ”样式,所以它保持像linebreaks的东西。 在Safari,FF和IE中,div看起来很像,工作原理也一样。 一切都很好。 我想要做的是从这个div中提取文本,但以这种方式不会丢失格式 – 特别是换行符。 我们正在使用jQuery,其text()函数基本上是一个预定义的DFS,并将DOM分支中的所有内容粘合到一起。 这会丢失格式。 我看了一下html()函数,但是似乎所有三个浏览器在我的contentEditable div中都会在幕后生成实际的HTML。 假设我把这个input到我的div中: 1 2 3 这是结果: Safari 4: 1 <div>2</div> <div>3</div> Firefox 3.6: 1 <br _moz_dirty=""> 2 <br _moz_dirty=""> 3 <br _moz_dirty=""> <br _moz_dirty="" type="_moz"> IE 8: <P>1</P><P>2</P><P>3</P> 啊。 这里没什么很一致的。 令人惊讶的是,MSIE看起来是最健康的! (大写P标签和所有) 该div将dynamic设置样式(字体,颜色,大小和alignment),这是使用CSS完成的,所以我不确定我是否可以使用pre标记(在我使用Google发现的某些页面上提到过)。 有谁知道任何JavaScript代码和/或jQuery插件或从contentEditable div中提取文本的方式,以保留换行符? 如果我不需要,我宁愿不重新创build一个parsing轮。 更新:我从jQuery 1.4.2中删除了getText函数,并修改了它的空白大部分完好无损(我只chnaged一行,我添加一个换行符); function extractTextWithWhitespace( elems ) { var […]

jQuery内存泄漏模式和原因

jQuery中有哪些标准问题或编码模式会导致内存泄漏? 我已经看到了一些与StackOverflow上的ajax()调用或jsonp或DOM删除相关的问题。 大部分的jQuery内存泄漏问题都集中在特定的问题或浏览器上,并且在jQuery中列出标准的内存泄漏模式会很好。 这里有一些关于SO的相关问题: 为什么jQuery泄漏内存如此糟糕? 简单的jQuery Ajax调用在Internet Explorer中泄漏内存 涉及jQuery Ajax请求的内存泄漏 networking资源: 如何使用jQuery.data将对象和数据附加到DOM,以避免内存泄漏问题 JavaScript中的内存泄漏模式

INPUT元素的“change”和“input”事件有什么区别?

有人能告诉我change和input事件之间的区别是什么? 我正在使用jQuery来添加它们: $('input[type="text"]').on('change', function() { alert($(this).val()); }) 它也适用于input而不是change 。 也许在事件顺序相对于重点有所不同?

触发HTML5表单validation

我有几个不同的字段集的表单。 我有一些Javascript,一次显示字段集的用户。 对于支持HTML5validation的浏览器,我很乐意使用它。 不过,我需要按照我的条件来做。 我正在使用JQuery。 当用户点击JS链接移动到下一个字段集时,我需要在当前字段集上进行validation,并在出现问题时阻止用户前进。 理想情况下,当用户失去对元素的关注时,就会发生validation。 目前没有validation去和使用JavaScript。 宁愿使用本地方法。 🙂

APIdevise和jQuery

我经常听说jQuery做出了一些糟糕的API决策。 尽pipejQuery并不是我最喜欢的库,但它是我经常使用的库,我很难指出APIdevise中的具体错误,以及如何改进。 jQuery API的哪些部分可以做得更好, 怎样才能实现不同, 为什么不同的实现会更好? 这个问题扩展到API的低级别的个别细节和API的高级细节 。 我们只是在讨论API中的缺陷,而不是在库的高层devise/目的中的缺陷,jQuery仍然是一个以select器引擎为中心的DOM操作库。 由于stream行库中API冻结的必要性,jQuery陷入了当前状态,开发人员做得很好。 从最近的.attr和.prop变化可以看出,开发人员没有灵活性来改变他们的任何devise决定(这是一个耻辱!)。 我能想到的一个具体例子就是 $.each(function(key, val) { }) VS $.grep(function(val, key) { }) 这足以让我感到困惑,所以我必须仔细检查参数是多频繁的。 请不要将jQuery 库与dojo和YUI等完整的框架进行比较,并抱怨缺lessfunction。

移动Safari浏览器:input字段上的JavaScript焦点()方法只适用于点击?

我似乎无法find解决这个问题的方法。 我有这样一个简单的input字段。 <div class="search"> <input type="text" value="yu no work"/> </div>​ 我试图把它focus()在一个函数内。 所以里面的一个随机函数(无所谓是什么函数)我有这个线… $('.search').find('input').focus(); 这在任何桌面上都能正常工作。 但是,它不适用于我的iPhone。 该领域没有得到专注,键盘没有显示在我的iPhone上。 为了testing目的,并向你们展示问题,我做了一个快速示例: $('#some-test-element').click(function() { $('.search').find('input').focus(); // works well on my iPhone – Keyboard slides in }); setTimeout(function() { //alert('test'); //works $('.search').find('input').focus(); // doesn't work on my iPhone – works on Desktop }, 5000);​ 任何想法为什么focus()将无法与我的iPhone超时function。 要查看实例,请在iPhone上testing这个小提琴。 http://jsfiddle.net/Hc4sT/ 更新: 我创build了与我目前在当前项目中所面对的完全相同的案例。 我有一个select框应该 – […]

在新请求中取消先前的ajax请求

我有一个函数,在input的变化上运行ajax调用。 但是,在前面的ajax调用完成之前,有可能会再次触发该函数。 我的问题是,如何在开始新的ajax调用之前中止以前的ajax调用? 不使用全局variables。 (请参阅这里回答一个类似的问题) 我目前的代码jsfiddle : 使用Javascript: var filterCandidates = function(form){ //Previous request needs to be aborted. var request = $.ajax({ type: 'POST', url: '/echo/json/', data: { json: JSON.stringify({ count: 1 }) }, success: function(data){ if(typeof data !== 'undefined'){ jQuery('.count').text(data.count) console.log(data.count); } } }); }; if(jQuery('#search').length > 0){ var form = jQuery('#search'); jQuery(form).find(':input').change(function() { […]