iMohammadreza
iMohammadreza

Reputation: 100

Can not add two String ( += operation )

I'm working on a project to get user mouse wheel movement and know it scrolls up or down. In my code I'm OK to get up and down movement. But I want to save movements to a string. For example if user scroll UP UP DOWN 'mhmh' show return "UUD" but now it just get last movement ( just U o D)

<script type="text/javascript">

function displaywheel(e){
    var evt=window.event || e //equalize event object
    var delta=evt.detail? evt.detail*(-120) : evt.wheelDelta
    //check for detail first so Opera uses that instead of wheelDelta
    var mhmh = ''
    var t = ''
    //mhmh = (delta<=-120)? mhmh + 'D' : mhmh + 'U'
    if (delta<=-120)
        t = "d"
    else
        t = "u"

    mhmh = mhmh + t
    document.getElementById("wheelvalue").innerHTML= mhmh //delta returns +120 when wheel is scrolled up, -120 when down
}

var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x

if (document.attachEvent) //if IE (and Opera depending on usesr setting)
    document.attachEvent("on"+mousewheelevt, displaywheel)
else if (document.addEventListener) //WC3 browsers
    document.addEventListener(mousewheelevt, displaywheel, false)
</script>

You can sample web page here. Whats the problem?

Upvotes: 2

Views: 44

Answers (3)

KAD
KAD

Reputation: 11122

Your variable 'mhmh' is in the local scope of the function, it is always being reset. Make it global outside of the function, you can then concatenate mouse movement and reset the variable when needed.

Upvotes: 0

Omkar Kulkarni
Omkar Kulkarni

Reputation: 824

just make the variable mhmh as a global variable

`

var mhmh = '';
function displaywheel(e){
    var evt=window.event || e //equalize event object
    var delta=evt.detail? evt.detail*(-120) : evt.wheelDelta
    //check for detail first so Opera uses that instead of wheelDelta

    var t = ''
    //mhmh = (delta<=-120)? mhmh + 'D' : mhmh + 'U'
    if (delta<=-120)
        t = "d"
    else
        t = "u"

    mhmh = mhmh + t
    document.getElementById("wheelvalue").innerHTML= mhmh //delta returns +120 when wheel is scrolled up, -120 when down
}

var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x

if (document.attachEvent) //if IE (and Opera depending on usesr setting)
    document.attachEvent("on"+mousewheelevt, displaywheel)
else if (document.addEventListener) //WC3 browsers
    document.addEventListener(mousewheelevt, displaywheel, false)

`

Upvotes: 0

Kevin Boucher
Kevin Boucher

Reputation: 16685

The problem is that you are redefining mhmh each time the event handler is called. This is where closures come in handy. Store your mhmh variable outside of the event handler context:

var mhmh = '';

function displaywheel(e){
    var evt=window.event || e //equalize event object
    var delta=evt.detail? evt.detail*(-120) : evt.wheelDelta
    //check for detail first so Opera uses that instead of wheelDelta

    var t = ''
    //mhmh = (delta<=-120)? mhmh + 'D' : mhmh + 'U'
    if (delta<=-120)
        t = "d"
    else
        t = "u"

    mhmh = mhmh + t
    document.getElementById("wheelvalue").innerHTML= mhmh //delta returns +120 when wheel is scrolled up, -120 when down
}

var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x

if (document.attachEvent) //if IE (and Opera depending on usesr setting)
    document.attachEvent("on"+mousewheelevt, displaywheel)
else if (document.addEventListener) //WC3 browsers
    document.addEventListener(mousewheelevt, displaywheel, false)

Upvotes: 2

Related Questions