Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQueryMobile add click event to a button instead of changing page

<p><a href="index.html" data-role="button" data-icon="arrow-r" data-iconpos="right" data-theme="a" onclick="doSomething(); return false">VERIFY</a></p>

I am using the above code which is a jQM button with the onClick() set. The onclick is called and doSomething() is executed but after that, jQM shows the "error loading page" message.

How can I supress the error? In this case I want the jQM button but don't want it to change page.

Thanks

like image 871
RandomCoder Avatar asked Apr 15 '11 11:04

RandomCoder


2 Answers

Since you are using jQuery I would recommend to use jQuery to wire up your events as well. With that being said using e.preventDefault(); and e.stopImmediatePropagation(); should stop jQuery mobile from performing the default action on the <a/>.

$("#verify").click(function (e) {
    e.stopImmediatePropagation();
    e.preventDefault();
    //Do important stuff....
});

Update

The better way to use your existing markup would be to simply add rel="external" to your <a/> And your onclick should behave correctly.

<p>
  <a href="index.html" data-role="button" data-icon="arrow-r" data-iconpos="right" data-theme="a" onclick="doSomething(); return false" rel="external">VERIFY</a>
</p>

This will work since jQuery Mobile will treat the link as a normal <a/> tag and return false will simply stop the default action.

like image 127
Mark Coleman Avatar answered Nov 02 '22 19:11

Mark Coleman


I think your problem is that you have multiple actions on your button and are using a anchor tag. When clicking the button you're invoking the page to transition to index.html and a onClick event.

<a 
    href="index.html"                       <-- go to index.html
    data-role="button" 
    data-icon="arrow-r" 
    data-iconpos="right" 
    data-theme="a" 
    onclick="doSomething(); return false">  <-- Click event
VERIFY
</a>

Might try (might need to remove/add some other attributes)

<input
    type="button"
    name="verify"
    id="verify"
    data-icon="arrow-r" 
    data-iconpos="right" 
    data-theme="a" 
    value="VERIFY" />

and now add a click event

$('#verify').click(function() {
    alert('Button has been clicked');
});

Live Example: http://jsfiddle.net/vRr82/2/

like image 6
Phill Pafford Avatar answered Nov 02 '22 19:11

Phill Pafford