我正在为一个用JSF构建的应用程序编写jQuery.JSF组件使用了很多自己的JS来执行JSF所做的任何事情,并且他们使用大量的onclick属性来处理它们.
是否有有效/正确的方法将您自己的click事件绑定到元素并确保您的事件在默认的onclick事件之前触发?看来默认情况下,在任何内联onclick函数调用之后会触发jQuery单击函数.
我们在data-*一些客户端交互设置中使用HTML5的属性.jQuery使用它们来做它的事情.
问题是进入的HTML可能会有所不同.显然,这是应该修复的问题,但不幸的是,我并不总是控制正在生成的HTML.
问题:
鉴于这两个标签:
<a data-sampleAttributeName="example">
<a data-sampleattributename="example">
Run Code Online (Sandbox Code Playgroud)
是否有一种聪明的方式将它们视为同一个?
我提出的最好的是这样的:
var theAttribute = ($myobject).data('sampleAttributeName');
if (($myobject).data('sampleAttributeName')){
theAttribute = ($myobject).data('sampleAttributeName')
} else {
theAttribute = ($myobject).data('sampleattributename')
}
Run Code Online (Sandbox Code Playgroud)
我可以把它变成一个函数,我可以将camelCase版本传递给并检查两者.我只是想知道jQuery中是否有一个更清晰的内置功能来忽略data(或attr)值的情况.
鉴于样本标记:
<div>
<input />
<input />
<input />
</div>
Run Code Online (Sandbox Code Playgroud)
如何通过jQuery确定div失去焦点?
我可以使用,focusout()但这不是我需要的.通过焦点输出,它将作为从输入到输入的一个选项卡被触发,因为它实际上正在检测(通过事件冒泡)输入正在失去焦点.
另一种表达要求的方式:我需要知道焦点何时移动到div的外部.
我之前问过类似的问题:
但这与弹出式UI有关,可以通过在其后面插入一个空白DIV并在其上放置一个click/focus事件作为触发器来绕过它,但这对于这种情况不起作用.
我的下一个想法是在调用focusout时测试focusin:
$(".myobject").focusout(function(element) {
if(!($(this).focusin())){
console.log('doYourThing ' + $(this));
}
});
Run Code Online (Sandbox Code Playgroud)
唉,这不起作用(我猜测是因为它在焦点事件期间评估焦点,因此,它还没有检测到焦点.
这个问题有什么聪明的解决方案吗?我可能错过了一个原生的jQuery事件,它正是我正在寻找的东西吗?
更新:
实际上,简化的问题:
我需要相当于$('div').blur()但实际上可以在div上工作(因为模糊不能从div触发)
我遇到了一个奇怪的问题,似乎是各种版本的Webkit浏览器.我试图将一个元素放在屏幕的中心并进行计算,我需要得到各种尺寸,特别是身体的高度和屏幕的高度.在jQuery我一直在使用:
var bodyHeight = $('body').height();
var screenHeight = $(window).height();
Run Code Online (Sandbox Code Playgroud)
我的页面通常比实际视口高很多,所以当我'警告'那些变量时,bodyHeight最终会变大,而screenHeight应该保持不变(浏览器视口的高度).
这是真的 - Firefox - Chrome 15(哇!Chrome什么时候进入15版?) - iOS5上的Safari
这不适用于: - iOS4上的Safari - Safari 5.0.4
在后两者上,$(window).height();始终返回相同的值$('body').height()
认为它可能是一个jQuery问题,我换掉了窗口高度window.outerHeight但是,它也做了同样的事情,让我觉得这实际上是某种webkit问题.
有没有人碰到这个并知道解决这个问题的方法?
为了使事情复杂化,我似乎无法孤立地复制这一点.例如:http://jsbin.com/omogap/3工作正常.
我已经确定这不是一个CSS问题,所以也许还有其他JS对我需要找到的特定浏览器造成严重破坏.
我与一个JSF团队合作进行前端开发.我们正在输出一个INPUT字段,我需要在渲染的标签中包含placeholder一些data-属性.然而,JSF正在剥离它们.我不知道JSF对JSF团队有多大帮助,但我想我至少可以问一下.
我们使用的是旧版本的JSF,但升级到2.0,因为它似乎支持HTML5.那不是这样吗?有没有一种已知的解决方法?
我想将一个元素的ID传递给一个函数,然后调用jQuery.但是,我很难理解如何实际获取ID变量并将其与jQuery语句中的其他文本连接起来.例如,这会返回错误:
myFunction("#myObject");
function myFunction(IDofObject){
$("'"+IDofObject+" img'").doSomething...
}
Run Code Online (Sandbox Code Playgroud)
我想用'#myObject img'做一些事情,但不能在声明中使用它.
我有这个示例代码:
$myTrigger
.click(function(e){
alert('click');
})
.focus(function(e){
alert('focus');
$(this).click()
})
Run Code Online (Sandbox Code Playgroud)
目的是当我点击$ myTrigger时我想要发生一些事情.另一方面,如果你通过键盘选中它(即焦点),我想要完全相同的事情发生,所以我要求它点击.
问题是,如果我点击它,它也会集中注意力.所以这两个警报都会消失.
有没有办法防止焦点事件在点击时熄灭?
更新:
Ajm的评论让我觉得我可能会问错了.
问题:点击事件是否总是在javascript(和/或jQuery中)中引发焦点?我是否可以假设每当我想要用鼠标单击并用键盘进行Tabed-in时,focus()事件都会同时处理?
或者它是否依赖于我附加事件的特定元素?(在这种情况下,$ myObject恰好是一个锚标记(链接).
通过Firefox + Firebug,可以向控制台写出一个jQuery对象,控制台将非常详细地向您展示该特定对象在DOM中引用的内容.
console.log($(mySelector))
Run Code Online (Sandbox Code Playgroud)
在IE8中,使用IE8开发人员工具,我还可以访问控制台日志,该日志将如上所述.但是,就像做一个警报($ myObject)一样,我得到的只是一个通用对象:
LOG: [object Object]
Run Code Online (Sandbox Code Playgroud)
有没有办法让IE向我展示除"这是一个对象"之外的更多细节?
我想检查是否已将jQuery数据值应用于对象.例如,其他地方的代码可能会将数据分配给对象:
$myObject.data('hello','world');
Run Code Online (Sandbox Code Playgroud)
在其他地方,我想检查是否给数据属性hello赋值.
处理这个问题的正确方法是什么?.hasData似乎是明显的选择,但似乎不像'hasClass'那样工作,因为你似乎无法将特定的数据元素名称传递给它.
我们说HTML是:
<div id="page" class="someclass"> more divs </div>
Run Code Online (Sandbox Code Playgroud)
如何使用ID在HTML中显示整个开始标记及其属性(但不是结束标记)?例如:
$('#page').tag();
Run Code Online (Sandbox Code Playgroud)
然后会返回:
<div id="page" class="someclass">
Run Code Online (Sandbox Code Playgroud)