12

如何在 jQuery 中创建一个函数、调用它并将变量传递给它?这里是 Javascript 风格:

<script type="text/javascript">
function popup(msg) {
  alert(msg);
}
</script>

然后,您只需将事件包含在 HTML 中:

<html>
<input type="submit" onclick="popup('My Message')" />
</html>

jQuery 相当于什么?从所有“新手”教程中,它们都是不接受变量的静态函数。例如:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
  $('button').click(function() {
    alert('hello, world');
   });
});
</script>

我希望能够动态地包含不同的消息。上面的代码会影响所有按钮并输出相同的消息“你好,世界”。

4

9 回答 9

16

如果您希望消息是动态的,您将要使用data-attributes

<input class='message-button-' type="submit" data-message="My Message" />

然后在一个单独的 javascript 文件中:

// equivalent of $(document).ready(function(){...
$(function(){

  // Functionality starts here
  $('.message-button').on('click', function(e){
    alert($(this).data('message'));
  })


});

现在该函数将在任何时候单击带有类的按钮时执行.message-button,并且它将使用自定义属性 data-message 来显示一条消息。

希望这可以帮助!:)

更新:

请注意,不显眼地执行 javascript 被认为是最佳实践。有些人提到仍然onclick像您在示例中所做的那样使用该属性,不要那样做。.on('click', function(){})使用 jquery 的方法像我在这里展示的那样绑定事件。

如果您的点击项目是一个锚标记<a>,那么您可以通过使用以下方式阻止 href 被关注e.preventDefault

$('a').on('click', function(e){
  e.preventDefault()
})

另外,如果您需要知道,这$('.message-button')是使用 css 选择器来抓取 dom 元素。任何有效的 CSS 选择器通常都可以在那里工作。

一步步

首先,我们需要将所有代码包装在一个由 jQuery 提供的函数中,该函数等待文档准备好处理 javascript 操作和 dom 操作。长格式版本是$(document).ready(function(){ /* CODE GOES HERE */ }),但我使用的版本是快捷方式$(function({ /* CODE GOES HERE */ })

$(function(){
})

接下来,我们需要将一个事件绑定到我们的按钮。因为我们已经给了它 class .message-button,所以我们可以使用 jQuery 来抓取该元素并将 'click' 事件绑定到它:

$(function(){
  // Functionality starts here
  $('.message-button').on('click', function(e){
    // Code here executes when the input button is clicked
  })


});

事件处理程序内部this重新绑定以直接指向触发事件的 HTML 元素。包装在 $() 中使我们可以访问 jquery 方法。因此: $(this) 使用非常频繁。jQuery 为我们提供了.data()访问data-*元素上的任何方法并为我们提供值的方法,这就是它alert()正在做的事情。

$(function(){
  // Functionality starts here
  $('.message-button').on('click', function(e){
    alert($(this).data('message'));
  })


});
于 2012-06-14T22:53:56.970 回答
6

这是我最好的方法,就像 javascript 一样:

---- 像这样使用 jQuery 创建函数

<script>$(document).ready(function(){
    popup=function(msg){
      alert(msg);
    }});
</script>

而且您无需更改正文中的代码

<html>
<input type="submit" onclick="popup('My Message')" />
</html>

这是示例http://jsfiddle.net/PLnF3/

---- 但是等等,如果您只需要显示一条警报消息,也许这个示例是最好的:

<html>
<input type="submit" onclick="alert('My Message')" />
</html>

您不需要任何 javascript 或 jQuery 来执行此操作,只需在按钮上使用 alert('My Message') 即可。示例http://jsfiddle.net/PLnF3/1/

---- 如果您想使用 jQuery 获得更好的外观,可以使用 jQuery Dialog()。

这里的例子http://howto.software-mirrors.com/2013/09/how-to-make-jquery-popup-window.html 这是代码:

<script>
    $(document).ready(function() {
        popup = function(msg) {
            $("<div>" + msg + "</div>").dialog();
        }
    });
</script>

而且你不需要改变你身上的html代码。

<html>
<input type="submit" onclick="popup('My Message')" />
</html>

这里的例子http://jsfiddle.net/PLnF3/2/

请记住,要能够使用 jQuery 对话框,您需要 jquery.js、jquery-ui.js 以及 jquery.css 主题。在http://howto.software-mirrors.com/2013/09/how-to-make-jquery-popup-window.html阅读更多内容

于 2013-09-07T05:36:49.477 回答
4

你会给每个按钮一个不同的 ID,像这样:

<input type="submit" id="submit-something" onclick="popup('My Message')" />

然后:

$(document).ready(function() {
    $('#submit-something').click(function() {
        alert('My message');
    });
});

此外,如果任务非常重复,您可以使用另一个函数来创建函数:

function messageHandler(message) {
    return function() {
        alert(message);
    };
}

$(document).ready(function() {
    $('#submit-something').click(messageHandler('My message'));
});
于 2012-06-14T22:53:41.183 回答
3

您应该将消息存储在一个data-*属性中:

<button data-message="Hi there!">...</button>
$('button').click(function() {
    alert($(this).data('message'));
});
于 2012-06-14T22:51:48.320 回答
2
$(document).ready(function() {
    var message = "foo"; // You might need to move it to the global scope,
                         // denepends on what you want to do with it.
  $('button').click(function() {
    alert(message);
   });
   ...
   ...
   message = "hello world";
});

值得一说:

如何在 jQuery 中创建函数

没有这样的东西,在jQuery中创建一个函数。

于 2012-06-14T22:49:29.077 回答
1

如果您绝对需要将数据存储在 HTML 代码中,数据属性是一个不错的选择:

<button class="alert" data-msg="My Message">Click me</button>

JavaScript:

$(document).ready(function() {
  $('button.alert').click(function() {
      var msg = $(this).data('msg');  // access HTML attribute data-msg
      alert(msg);
  });
});
于 2012-06-14T22:51:33.117 回答
0

一种解决方案:使用参数等属性。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
  $('button').click(function() {
    alert($(this).attr("message"));
   });
});
</script>
<button message="personal message 1">Botton 1</button>
<button message="personal message 1">Botton 2</button>
于 2012-06-14T22:51:47.313 回答
0

我已经尝试了一些建议,效果很好..

--html 按钮

<input type="submit" value="Submit 1" class="message" data-message="Sample Message 1"/>
<input type="submit" value="Submit 2" class="message" data-message="Sample Message 2"/>

--jquery 按钮点击

$('.message').live('click', function(){
      alert($(this).data('message'));
});
于 2012-06-15T05:29:02.683 回答
0
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>POS</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script>


function getUnitPrice(){
        var item = document.getElementById('item').value;
        if(item==0){
            document.getElementById('unitprice').value = "36000.00";
        }
        if(item==1){
            document.getElementById('unitprice').value = "2500.00";
        }
        if(item==2){
            document.getElementById('unitprice').value = '14000.00';
        }
        if(item==3){
            document.getElementById('unitprice').value = '40000.00';
        }
        if (item==" "){
            document.getElementById('unitprice').value = '0';
        }


}

function calcSubtotal(){
    var qty = document.getElementById('quantity').value;
    var price = document.getElementById('unitprice').value;
    if(isNaN(qty)||isNaN(price)){
        alert("Please enter valid values");

    }
    else{
        var subtotal= eval(price) * eval(qty);
        document.getElementById('subtotal').value = subtotal;
    }




}


function calcDiscount(){

    var discRate = document.getElementById('discountRate').value;
    var discAmount = document.getElementById('subtotal').value;

    if(isNaN(discRate)||isNaN(discAmount)){
        alert("Please enter valid discount");
        return;
    }
    if(discRate < 5 || discRate > 20 ){
        alert("Please enter valid discount");
        return;
    }

    var discount = eval(discAmount) * eval(discRate)/100;
    document.getElementById('discountAmount').value = discount;
    document.getElementById('total').value= discAmount - discount;



}

function calcBalance(){

    var cash = document.getElementById('cash').value;
    var total = document.getElementById('total').value;

    if(isNaN(cash)){
        alert("Enter valid amount");
        return;
    }

    var bal = eval(total) - eval(cash);
    document.getElementById('balance').value = bal;



}

</script>

</head>

<body class="container">
    <div class="panel panel-primary" style="margin-top: 10px;">
        <div class="panel-heading">
            <p style="font-size: 36px; margin: 0;"><strong>Kumara Super Centre</strong></p>
            <p style="font-size: 16px; margin: 0;">No. 300, Ja-ela Road, Gampaha. Tel: 033-2232526</p>
        </div>
        <div class="panel-body">
        <table class="table table-hover">
            <tr>
                <th class="text-center">Item</th>
                <th class="text-center">Quantity</th>
                <th class="text-center">Unit Price</th>
                <th class="text-center">Amount</th>
            </tr>
            <tr>
                <td class="col-lg-5">
                    <select class="form-control" id="item" required onChange="getUnitPrice()">
                        <option value="">Select one</option>
                        <option value="0">Television</option>
                        <option value="1">FM Radio</option>
                        <option value="2">DVD Player</option>
                        <option value="3">Surround System</option>
                    </select>
                </td>
                <td class="col-lg-2">
                    <input class="form-control" type="number" value="0" id="quantity" name="quantity" required onKeyUp="calcSubtotal()" />
                </td>
                <td class="col-lg-2">
                    <input class="form-control" type="number" value="0" id="unitprice" name="unitprice" readonly />
                </td>
                <td class="col-lg-3">
                    <input class="form-control" type="number" value="0" id="subtotal" name="subtotal" readonly />
                </td>
            </tr>
        </table>
        <table class="table" style="float: right; width: 600px;">
            <tr style="border:none">
                <td class="text-center col-lg-3"><strong>Discount Rate (%)</strong></td>
                <td class="col-lg-2"><input class="form-control" type="number" value="0" id="discountRate" name="discountRate" onKeyUp="calcDiscount()" /></td>
                <td class="col-lg-3"><input class="form-control" type="number" value="0" id="discountAmount" name="discountAmount" readonly /></td>
            </tr>
            <tr style="border-top:none">
                <td class="text-center"><strong>Total</strong></td>
                <td></td>
                <td><input class="form-control" type="number" value="0" id="total" name="total" readonly /></td>
            </tr>
            <tr style="border:none">
                <td class="text-center"><strong>Cash</strong></td>
                <td></td>
                <td><input class="form-control" type="number" value="0" id="cash" name="cash" onKeyUp="calcBalance()" /></td>
            </tr>
            <tr style="border:none">
                <td class="text-center"><strong>Balance</strong></td>
                <td></td>
                <td><input class="form-control" type="number" value="0" id="balance"  name="balance" readonly /></td>
            </tr>
        </table>

        </div>



    </div>
</body>
</html>
于 2018-10-09T16:24:23.257 回答