我有像这样的HTML
<span rel='comm' val='12'>click</span>
<span rel='comm' val='82'>click</span>
我正在使用JQuery来执行此操作
$('span[rel*=comm]').cust();
并且自定义函数就是这样
$.fn.cust = function () {
$(this).click(function(e) {
alert($(this).val());
});
}
即使我点击第二个跨度应该给我82
,这个值也是12任何帮助都将不胜感激。
答案 0 :(得分:2)
您需要为集合中的每个元素返回一个单独的函数,通常使用return this.each ...
$.fn.cust = function () {
return this.each(function() {
$(this).click(function(e){
alert($(this).val());
});
});
}
并且value
不是span
元素的有效属性。
答案 1 :(得分:0)
这应该更好:
$.fn.cust = function () {
$(this).click(function (e) {
alert($(this).attr('val'));
});
}
span没有值。
另外,如果你想让你的方法可链接,你应该返回一个jQuery实例:
$.fn.cust = function () {
return $(this).click(function (e) {
alert($(this).attr('val'));
});
}
$('span[rel*=comm]').cust().css('color', 'red');
答案 2 :(得分:0)
rel
用于链接(锚元素) - 使用class
data
属性而非自定义属性http://jsbin.com/ogenev/1/edit
<span class='comm' data-val='12'>click</span>
<span class='comm' data-val='82'>click</span>
$.fn.cust = function(){
$(this).click(function(){
alert(this.dataset.val);
});
};
$('.comm').cust();
答案 3 :(得分:0)
如果您使用.attr('val')
$.fn.cust = function () {
$(this).click(function(e){
alert($(this).attr('val'));
});
}
$('span[rel*=comm]').cust();
.val()
适用于input
,因为他们是唯一接受val
属性官方
答案 4 :(得分:0)
对于与选择器匹配的所有范围,调用$('span[rel*=comm]')
会返回 JQuery包装 - 您的示例中的两个选择都会被选中。
现在在cust
的定义中,$(this)
指的是包装数组,这会导致您的问题。使用
$(this).each( function() {
$(this).click (...
});
Inisde each
$(this)
将指向选择中的每个单独的span元素,因此它们将单独附加click
处理程序并按预期工作。
答案 5 :(得分:0)
您可以通过以下方式实现您的目标:
HTML:
<span rel='comm' val='12'>click</span>
<span rel='comm' val='82'>click</span>
JS:
var cust = function(source) {
alert($(source).attr('val'));
}
$('span[rel*=comm]').click(function(e) {
cust(this);
});
JSFiddle工作:http://jsfiddle.net/ejquB/