通过click()在jQuery中检索div的属性值

时间:2014-10-16 14:15:05

标签: javascript jquery html

对于模糊的标题,我们深表歉意。我正在使用jQuery。我的应用程序中有一个小方案,我被卡住了。

问题:我的脚本中有两个函数,名为func1func2。我希望在用户点击div元素时执行这两个函数,并在这两个函数中访问code属性的值。

<div id="testId" code="102">Click ME</div>

代码

<html>
    <body>
        <div id="testId" code="102">Click ME</div>
        <script type='text/javascript' src='jquery.js'></script>
        <script type='text/javascript' src='script.js'></script>
    </body>
</html>

的script.js

var code1 = "";
var code2 = "";

func1 = function(){
    code1 = $(this).attr('code');
    alert("code1 is "+code1);
}

func2 = function(){
    code2 = $(this).attr('code');
    alert("code2 is "+code2+'2');
}

$('#testId').click(func1, func2);
/*$('#testId').click(function(){
    func1();
    func2();
});*/

我想在我的两个函数中访问code="102"的值。我试过两种方法。 首先,我尝试了以下代码段:

$('#testId').click(func1, func2);

这只会执行func2code也正在访问func2属性的值。但func1没有执行!怎么做?

然后我尝试了第二种方式。通过使用以下代码段

,我可以在用户点击div时执行这两个功能
$('#testId').click(function(){
        func1();
        func2();
    });

但现在我无法访问code属性的值,并且未定义!如何在codefunc1中访问func2属性的值?

我知道我可以将参数传递给func1func2,如下所示,稍后可以访问这些值,

$('#testId').click(function(){
            func1('value of code');
            func2('value of code');
        });

但如果可能,我正在寻找不同的解决方案。

最后,我正在寻找一种方法来执行这两个函数,并且还可以访问code属性的值。任何建议将不胜感激!

3 个答案:

答案 0 :(得分:2)

这真是一个范围问题。在http://jsfiddle.net/dboots/dhd0dem7/可以看到正确的解决方案。

在您的代码中,您在func1和func2中引用了$(this)。这些是指实际的func1和func2范围,他们不知道“代码”是什么。

点击处理程序中的$(this)实际上是指您点击的div元素,因此适合在那里使用它。

在jsfiddle中,我们在全局级别声明代码并在单击处理程序中设置它。

var code;

$('#testId').click(function() {
    code = $(this).attr('code');

    func1();
    func2();
});

然后func1和func2函数可以根据需要访问它。

function func1() {
    alert('func1 code: ' + code);
}

function func2() {
    alert('func2 code: ' + code);
}

替代解决方案

将代码传递给各个函数,如http://jsfiddle.net/dboots/dhd0dem7/1/中所示。

function func1(code) {
    alert('func1 code: ' + code);
}

function func2(code) {
    alert('func2 code: ' + code);
}

$('#testId').click(function() {
    code = $(this).attr('code');

    func1(code);
    func2(code);
});

答案 1 :(得分:2)

首先,您正在使用.Click()方法,因此,如果您使用.click(func1, func2),则希望.click( [eventData ], handler )。因为只执行function2所以它是一个处理程序。

你需要执行如下:

$('#testId').click(function(){
        func1();
        func2();
    });

如果您需要获取代码,最好创建一个数据属性,如:

    <div id="testId" data-code="102">Click ME</div>


    $('#testId').click(function(){
        func1.call(this);
        func2.call(this);
    });

func1 = function(){    console.log($(this).data('code'));
    code1 = $(this).data('code');
    alert("code1 is "+code1);
}

使用.call()发送调用该函数的人。

<强>优势:

嗯.data()attr最好是因为你读过的所有数据都会知道它是aditional参数,而只是代码,你可能不知道它来自哪里。没有.call保持方法清理参数。

缺点

您需要知道,通话是做什么的。并且可能将Vanilla与jQuery混合在一起。 :)

LIVE DEMO

答案 2 :(得分:1)

您可以将函数绑定到此

的值
func1.bind(this)();
func2.bind(this)();

这样当你的函数试图访问$(this)时它将指向与click事件中相同的对象