我得到'this.0.files.0'为null或IE8和IE9上没有对象错误,Chrome和Mozila不会抛出任何错误.
$(function()) {
var fileType = ['txt' , 'csv' ];
$('.input_file').find('input [type = "file" ]').live('change', function (e)) {
$this = $(this)
var ext = $this.val() === " " ? " " : this.value.match(/\.(.+)$/)[1];
if($this.val()) {
$this.parent().find('label').text.($this[0].files[0].name)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么上面的代码抛出一个javascript错误'this.0.files.0'是null或不是一个对象
我将使用javascript来创建一个函数来同时更改背景颜色以及文本 - 基于文本输入的值.我已经改变了背景颜色,但无法设法使文本正常工作.
function changeBackground() {
// The working function for changing background color.
document.bgColor = document.getElementById("color").value;
// The code I'd like to use for changing the text simultaneously - however it does not work.
document.getElementById("coltext").style.color = document.getElementById("color").value;
}
Run Code Online (Sandbox Code Playgroud)
查看上面的代码,document.getElementById("coltext").style.color = x当我输入实际颜色而不是"颜色"值时,文本的代码会起作用.
这是我所指的html(我知道它可怕的优化,但它正在进行中):
<form id="TheForm" style="margin-left:396px;">
<input id="color" type="text" onchange="changeBackground();" />
<br/><input id="submitColor" value="Submit" type="button" onclick="changeBackground();" style="margin-left:48px; margin-top:5px;" />
</form>
<span id="coltext">This text should have the same color as you put in the text box</span>
Run Code Online (Sandbox Code Playgroud)
显然,不幸的是,我不能以这种方式使用代码.但无论如何我都努力尝试,除此之外,我达到了一种无限的复杂性.它应该是解决这个问题的一种简单方法,对吧?
我遇到了一个真正令人头疼的问题,我希望有人可以解决我的问题.
我正在编写的应用程序是一个基于JS的客户端,本质上是一个桌面共享服务.该服务从桌面捕获图像,将它们编码为base64编码的jpeg,并通过websocket将它们发送到JS客户端.客户端然后显示这些图像(作为数据URI),用户可以将鼠标移动到图像上以及单击图像,这些鼠标事件被编码为XML中的命令,这些命令被放入队列并每隔15ms在计时器上进行服务这样,队列可以在发送到服务之前清除冗余或重复的命令.然后执行这些命令(在桌面上生成点击事件,移动鼠标等),并生成新的桌面图像并继续循环.
整个系统运行得非常好,除了iPad上Safari上的一些非常不一致的行为.本质上,当用户在屏幕上移动他们的手指时,客户端似乎阻止(或可能取消优先级)websocket上的传入消息,而仅支持发送传出消息.显而易见的是,当您移动手指时,只要您触摸屏幕,显示器就不会更新,然后一旦抬起手指,onMessage()将收到大量图像更新,然后快速连续动画到屏幕上.
Mobile Safari是唯一似乎以这种方式运行的浏览器,我测试过的桌面浏览器或任何Android平板电脑都没有显示出相同的行为.
我已经将登录到websocket上的入站和出站方法,它确认了我见过的行为.在Safari上,我会连续收到大量的出站邮件,然后是大量的入站邮件,而在Android上,当您在屏幕上拖动手指时,我会看到入站和出站邮件交错,因此在Android上显示当你拖着手指时,它会继续更新.
我怀疑websocket是罪魁祸首的主要原因是因为客户端具有回退机制,因此如果浏览器没有websocket支持,则会创建一对XHR对象(一个用于入站,一个用于出站),而是使用websocket的.如果我强制移动Safari使用XHR而不是websockets,问题就会消失.在这种情况下,只有通信机制发生变化(用于捕获输入事件和显示图像的所有代码保持不变).
我意识到这是一个非常具体的问题,没有代码就很难诊断,但我选择不发布代码只是因为客户端中的代码量很大.
如果有人看到类似于我所描述的行为,或者知道这种行为的任何潜在原因,我将非常感谢您的意见.
我很好奇一种改进的方法来动态删除基于通配符的javascript对象的属性.首先,假设我有以下对象:
object =
{
checkbox_description_1 : 'Chatoyant',
checkbox_description_2 : 'Desultory',
random_property : 'Firefly is a great program',
checkbox_mood_1 : 'Efflorescent',
checkbox_description_3 : 'Ephemeral'
}
Run Code Online (Sandbox Code Playgroud)
现在,最终结果是以'checkbox_description'为幌子删除了所有属性,并保留对象的其余部分,如下所示:
object =
{
random_property : 'Firefly is a great program',
checkbox_mood_1 : 'Efflorescent',
}
Run Code Online (Sandbox Code Playgroud)
目前我的解决方案涉及jquery和以下代码:
var strKeyToDelete = 'checkbox_description'
/* Start looping through the object */
$.each(object, function(strKey, strValue) {
/* Check if the key starts with the wildcard key to delete */
if(this.match("^"+strKey) == strKeyToDelete) {
/* Kill... */
delete object[strKey];
}; …Run Code Online (Sandbox Code Playgroud) 我使用jEditable,我想知道,如果,如果有可能有一个选择(类型=选择)与optgroups?
我实现了一个功能,其中div通过ajax响应填充,检查下面的代码以获得更清晰:
jQuery.ajax({
type: 'POST',
url: url,
dataType: 'json',
data:data,
success: function(jsonResp) {
$('#formContainer').html(jsonResp.html);
}
});
Run Code Online (Sandbox Code Playgroud)
jquery .html()函数在FF,crome,IE 8,9中工作,但不能在IE7中工作,因为预期它没有填充给定的html响应,我在代码中做了一些调试并检查是否有任何其他具有相同ID的div但是有文档中只有一个div具有'formContainer'ID,之后当我使用innerHTML函数而不是$.html()函数时,它在IE7中正常工作,我无法弄清楚为什么innerHTML工作$.html()而不是.
如果有任何主要原因我需要在整个应用程序中$().html()按innerHTML功能替换功能.
我有一个网页,登录后,您基本上坐在一个页面上并执行一些导致 AJAX 请求的事情。
由于 AJAX 请求与普通 HTTP 请求没有什么不同,因此它们会根据需要在到达服务器时延长会话的到期时间。
我对此没有任何问题,因为用户的会话只有在与服务器交互时才应该被扩展,这是有道理的。
由于用户基本上停留在这个页面上,我希望能够在他们的会话过期时通知他们,而不是他们在超时发生后尝试使用任何操作访问服务器时发现困难的方法。
所以我被要求实现一些我经常在银行网站上看到的东西,在alert用户会话到期之前,弹出窗口 ( ) 出现。我不需要它在之前立即出现,但是“只要”它到期(或尽可能接近,在它发生之后),因此用户无法在页面上执行任何操作并意外地被重定向到登录页面。
我最初的想法是轮询服务器并每 30 秒左右检查一次。这样做的问题是 AJAX 请求会重置会话的到期时间(即 30 分钟),从而使使用此轮询的点无效。
当然,一个“解决方案”是在 Javascript 中处理这个问题——当收到正常动作的 AJAX 请求时,重置计时器。此计时器将在设置后 30 分钟运行。而且我知道这不会太难,因为我可以将它附加到 jQuery 的全局 AJAX 处理程序,以便它在每次成功的 AJAX 调用后重置计时器,但对我来说跟踪会话时间似乎不正确两个地方出。我宁愿“浪费”资源并经常进行 AJAX 调用。我只是不希望用户必须做一些事情来找出他们的会话何时到期 - 如果他们离开计算机 31 分钟,我希望在他们回来时有一条消息说他们的会话已过期,他们会被重定向。
从我浏览过的许多文章/解释中,我真的找不到任何适用于我的情况的内容。我见过使用 Spring Security 的东西,但不幸的是我们没有使用它,因为我们不使用普通的用户名/密码方案,并且无法弄清楚如何自定义它才能工作。
我已经看到了“过滤器”或“拦截”这些术语,但我不确定我是否可以使用它们,因为这似乎是一个安全问题。
所以基本上,我正在寻找某种方法来在会话过期时进行 HTTP 请求检查,而无需重置其过期时间。我基本上只需要基于此(我可以弄清楚)以某种形式的真/假做出回应。
我真的很想在服务器上保留这种处理,并允许轮询在会话超时时捕获,因此 HTTP 请求需要能够查看会话的当前状态并进行分析,但不能重置超时。
如果有帮助,我的会话声明如下:
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserDataSession {
Run Code Online (Sandbox Code Playgroud)
我的控制器像这样使用它:
@Autowired
private UserDataSession userDataSession;
Run Code Online (Sandbox Code Playgroud)
有没有办法绕过请求映射中会话到期的重置?
我发现了很多关于更改 url(无需重新加载)的问题。一些答案是 - 使用插件,使用location.hash...,或重新加载
但他们都没有为我工作。
在网站上,我有一个下拉菜单,在更改时,url 参数应该已更改。
所以我想做的是:
我想改变:www.foo.com?country=Germany为 www.foo.com?country=Slovenia不重装。
我正在努力实现的目标是可能的吗?
我试图在点击一个链接后显示#subscribe-pop div,并在点击它之外的任何地方时隐藏它.如果我改变:我可以让它显示和隐藏:
$('document').click(function() {
Run Code Online (Sandbox Code Playgroud)
至
$('#SomeOtherRandomDiv').click(function() {
Run Code Online (Sandbox Code Playgroud)
HTML:
<div id="footleft">
<a href="#" onclick="toggle_visibility('subscribe-pop');">Click here to show div</a>
<div id="subscribe-pop"><p>my content</p></div>
</div>
Run Code Online (Sandbox Code Playgroud)
脚本:
<script type="text/javascript">
function toggle_visibility(id) {
var e = document.getElementById("subscribe-pop");
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
}
$('document').click(function() {
$('#subscribe-pop').hide(); //Hide the menus if visible
});
$('#subscribe-pop').click(function(e){
e.stopPropagation();
});
</script>
Run Code Online (Sandbox Code Playgroud) I have html:
<form id="fileuploadform">
<input type="file" id="fileupload" name="fileupload" />
</form>
Run Code Online (Sandbox Code Playgroud)
and jquery:
$(':file').change(function(){
var file = this.files[0];
...
});
Run Code Online (Sandbox Code Playgroud)
The problem is: the change function fires only when the file selection is different than the selection made previously. That is of course the meaning of the 'change' event. I want my function to be called with the file dialog closes, no matter what.
我尝试使用 'select' 事件——它永远不会被调用
我也试过:
$(':file').bind('dialogclose', function(event) {
alert('closed');
});
Run Code Online (Sandbox Code Playgroud)
和:
$(':file').live("dialogclose", function(){
alert('closed1');
});
Run Code Online (Sandbox Code Playgroud)
他们也没有工作。