jQuery এর। ক্লিক - ব্যবহারকারীর ফাংশনে প্যারামিটারগুলি পাস করুন


283

আমি jQuery এর। ক্লিক ক্লিক করে পরামিতিগুলির সাথে একটি ফাংশন কল করার চেষ্টা করছি, তবে আমি এটি কাজ করতে পারি না।

আমি এটি এইভাবে কাজ করতে চাই:

$('.leadtoscore').click(add_event('shot'));

যা কল

function add_event(event) {
    blah blah blah }

আমি যদি প্যারামিটারগুলি ব্যবহার না করি তবে এটি কাজ করে:

$('.leadtoscore').click(add_event);
function add_event() {
    blah blah blah }

তবে আমার add_eventফাংশনটির মাধ্যমে আমার একটি পরামিতি পাস করতে সক্ষম হওয়া দরকার ।

আমি কীভাবে এই নির্দিষ্ট জিনিসটি করতে পারি?

আমি জানি আমি ব্যবহার করতে পারি .click(function() { blah }তবে আমি add_eventএকাধিক জায়গা থেকে ফাংশনটি কল করি এবং এটি এইভাবে করতে চাই।


এটি patricksউত্তর থেকে গৃহীত হয়েছে , যা আমি মনে করি এটি একটি দুর্দান্ত সমাধান: jsfiddle.net/naRRk/1
jAndy

উত্তর:


514

পূর্ণতার জন্য, আমি আরেকটি সমাধান পেয়েছি যা jQuery ক্লিক ইভেন্ট হ্যান্ডলারের 1.4.3 সংস্করণে প্রবর্তিত কার্যকারিতার অংশ ছিল

এটি আপনাকে ইভেন্টের অবজেক্টে একটি ডেটা মানচিত্র পাস করার অনুমতি দেয় যা স্বয়ংক্রিয়ভাবে প্রথম প্যারামিটার হিসাবে jQuery দ্বারা ইভেন্ট হ্যান্ডলার ফাংশনে ফিরে আসে। ডেটা ম্যাপটি .click()প্রথম পরামিতি হিসাবে ফাংশনে হস্তান্তর করা হবে , তারপরে ইভেন্ট হ্যান্ডলার ফাংশনটি অনুসরণ করবে।

আমার অর্থটি বোঝানোর জন্য এখানে কিছু কোড দেওয়া হয়েছে:

// say your selector and click handler looks something like this...
$("some selector").click({param1: "Hello", param2: "World"}, cool_function);

// in your function, just grab the event object and go crazy...
function cool_function(event){
    alert(event.data.param1);
    alert(event.data.param2);
}

আমি জানি এই প্রশ্নের জন্য গেমটি দেরিতে হয়েছে, তবে পূর্ববর্তী উত্তরগুলি আমাকে এই সমাধানে নিয়ে গেছে, তাই আমি আশা করি এটি কারওর মাঝে সহায়তা করবে!


11
আমি ঠিক তাই চেয়েছিলাম (ফিরে এসেছি)। আমি তখন থেকে এই প্রকল্পে কাজ করি নি, তবে আমি মনে করি আমি 1.4.0 ব্যবহার করছি। এটি অবশ্যই উপলভ্য সেরা উপায়।
পল হাফার

1
আমি গতিশীলভাবে সার্ভারের পাশে অবজেক্টটি তৈরি করছি এবং ক্লিক ইভেন্টটিকে এর সাথে আবদ্ধ করছি: r.OnClientClick = "চিত্র-ক্লিক করা ({প্যারাম 1: '" + .জম। কম্যান্ড + "'}); মিথ্যা প্রত্যাবর্তন"; তারপরে ক্লায়েন্টের পাশে আমার কাছে রয়েছে: ফাংশন ইমেজ ক্লিক (ইভেন্ট) ক্লিক করুন event যদি (ইভেন্ট.প্রেম 1 == "গোটো পূর্ববর্তী") {... আমি যদি ইভেন্ট.ডাটা.প্রেম 1 ব্যবহার করি তবে এটি বলে যে এটি অপরিজ্ঞাত। এখন আমি এখানে এটি টাইপ করেছি, আমি পার্থক্য দেখতে পাচ্ছি, ওহ!
পরিবার

1
@ ফ্যামিলি - হাহাহা কোনও সমস্যা নেই, এমনকি মন্তব্যগুলির মাধ্যমেও এটি সাহায্য করা ভাল))
ক্রিস কেম্পেন

5
@totymedli - আমি অনুমান তুমি সবসময় এটা অন্য কোথাও বলতে পেরেছিলাম, একই কাঠামোর একটি বস্তু ক্ষণস্থায়ী: var param_obj = {data : {param1: "Hello", param2: "World"}}; cool_function(param_obj);?
ক্রিস কেম্পেন

1
এটি এইচটিএমএল 5 ডেটা- বৈশিষ্ট্যগুলি ব্যবহার করার চেয়ে অনেক ভাল, আপনাকে ধন্যবাদ! (এবং জেএসহিন্ট কলব্যাকেও 'এটি' ব্যবহার করার অভিযোগের সমাধান করে!)
ম্যাথু হার্বস্ট

77

আপনার এইরকম একটি বেনামি ফাংশন ব্যবহার করতে হবে:

$('.leadtoscore').click(function() {
  add_event('shot')
});

উদাহরণস্বরূপ আপনি এটিকে কল করতে পারেন, পরামিতি ছাড়াই কেবল একটি ফাংশনের নাম, এটির মতো :

$('.leadtoscore').click(add_event);

তবে add_eventপদ্ধতিটি 'shot'এটির প্যারামিটার হিসাবে পাবে না , বরং clickএটি কলব্যাক যা যা যা তা eventনিজেই ঘটে ... তাই এটি এই ক্ষেত্রে প্রযোজ্য নয় , তবে অন্য অনেকের পক্ষে কাজ করে। আপনার যদি প্যারামিটারগুলি পাস করার প্রয়োজন হয় তবে একটি বেনামি ফাংশন ব্যবহার করুন ... বা, অন্য একটি বিকল্প রয়েছে, .bind()ডেটা ব্যবহার করুন এবং এইভাবে পাস করুন:

$('.leadtoscore').bind('click', { param: 'shot' }, add_event);

এবং এর মধ্যে এটি অ্যাক্সেস করুন add_event:

function add_event(event) {
  //event.data.param == "shot", use as needed
}

আপনি যখন ন্যায়সঙ্গত বলেন, তার অর্থ কি কেবল? দ্বিতীয়ত, এর অর্থ কি এই যে আমি সাধারণত আমার বেনাম ফাংশনের অভ্যন্তরে আমার অ্যাড_ভেন্ট ফাংশনের ভিতরে $ (এটি) ব্যবহার করতে সক্ষম হব?
পল হাফফার 21

2
@ ফফার - হ্যাঁ, "জাস্ট" এর অর্থ কোনও প্যারাম নেই, কেবলমাত্র ফাংশনের নাম, এটি ফাংশনটির একটি রেফারেন্স, আপনি clickহ্যান্ডলারের কাছে যে ফাংশনটি বরাদ্দ করতে চান তা চালানোর ফলাফল নয় । .bind()উপরের বেনামী পদ্ধতি এবং উদাহরণগুলিতে আপনি ব্যবহার করতে পারেন thisএটি আপনার .loadtoscoreক্লিক করা (আপনার পছন্দ মতো) উল্লেখ করবে। শেষ উদাহরণে, এর ভিতরেই add_event(event)সত্য, ব্যবহার করুন thisবা $(this)এটি আপনি যা চান তা হ'ল ।
নিক ক্র্যাভার

1
@phoffer: আপনি যাতে এটা ব্যবহার করতে, যেমন মধ্যে স্পষ্টভাবে উপাদান পাস করতে হবে হবে: function(){ add_event('shot', $(this));}এবং function add_event(event, element){...}elementএখানে একটি jQuery উপাদান হতে হবে ( bind()নিক হিসাবে উল্লেখ করা যদিও এটি সঙ্গে কাজ করে )।
ফেলিক্স ক্লিং 21

@ ফেলিক্স - তিনি ফাংশনটির ভিতরেও ব্যবহার করতে পারেন $(this), উদাহরণস্বরূপ: jsfiddle.net/tSu5t
নিক ক্র্যাভার

35

যদি আপনি এটি যেভাবে বলে থাকেন তবে ...

$('.leadtoscore').click(add_event('shot'));

... আপনার add_event()কোনও ফাংশন রিটার্ন করা দরকার যেমন ...

function add_event(param) {
    return function() {
                // your code that does something with param
                alert( param );
           };
}

ফাংশনটি ফেরত দেওয়া হয় এবং এর তর্ক হিসাবে ব্যবহৃত হয় .click()


@ জে অ্যান্ডি - eventপ্যারামিটার সহ উদাহরণ পোস্ট করার জন্য ধন্যবাদ । আমার এটি অন্তর্ভুক্ত করা উচিত ছিল। : ও)
ব্যবহারকারী 113716

27

.On () এর মত ব্যবহার করে আমি সাফল্য পেয়েছি:

$('.leadtoscore').on('click', {event_type: 'shot'}, add_event);

তারপরে add_eventফাংশনের অভ্যন্তরে আপনি এইভাবে 'শট'-এ অ্যাক্সেস পাবেন

event.data.event_type

দেখুন .on () ডকুমেন্টেশন আরও তথ্যের যেখানে তারা নিম্নলিখিত উদাহরণে প্রদান জন্য:

function myHandler( event ) {
  alert( event.data.foo );
}
$( "p" ).on( "click", { foo: "bar" }, myHandler );

11

হ্যাঁ, এটি একটি পুরানো পোস্ট। নির্বিশেষে, কেউ এটি দরকারী মনে হতে পারে। ইভেন্ট হ্যান্ডলারের প্যারামিটারগুলি প্রেরণের এখানে আরও একটি উপায়।

//click handler
function add_event(event, paramA, paramB)
{
    //do something with your parameters
    alert(paramA ? 'paramA:' + paramA : '' + paramB ? '  paramB:' + paramB : '');
}

//bind handler to click event
$('.leadtoscore').click(add_event);
...
//once you've processed some data and know your parameters, trigger a click event.
//In this case, we will send 'myfirst' and 'mysecond' as parameters
$('.leadtoscore').trigger('click', {'myfirst', 'mysecond'});

//or use variables
var a = 'first',
    b = 'second';

$('.leadtoscore').trigger('click', {a, b});
$('.leadtoscore').trigger('click', {a});

6
      $imgReload.data('self', $self);
            $imgReload.click(function (e) {
                var $p = $(this).data('self');
                $p._reloadTable();
            });

জাভাস্ক্রিপ্ট অবজেক্টটি অনক্লিক উপাদানটিতে সেট করুন:

 $imgReload.data('self', $self);

"এই" উপাদান থেকে অবজেক্ট পান:

 var $p = $(this).data('self');

অসাধারণ! দুঃখের বিষয়, যখন আমি jquery ভেরিয়েবলগুলি ব্যবহার করার চেষ্টা করি তখন এটিই কেবল কাজ করে! কেন জানি না। : |
ক্রেগক্স

3

আমি সহজ সমাধান পেতে:

 <button id="btn1" onclick="sendData(20)">ClickMe</button>

<script>
   var id; // global variable
   function sendData(valueId){
     id = valueId;
   }
   $("#btn1").click(function(){
        alert(id);
     });
</script>

আমার গড়টি হ'ল মান onclickইভেন্টটি পাস করে javascript function sendData(), ভেরিয়েবলটি আরম্ভ করুন এবং এটি jquery ইভেন্ট হ্যান্ডলার পদ্ধতির দ্বারা গ্রহণ করুন।

প্রথমে sendData(valueid)বলা হয়ে মানটি আরম্ভ করার পরে এটি সম্ভব । তারপরে jquery ইভেন্টটি কার্যকর হয়ে যায় এবং সেই মানটি ব্যবহার করে।

এটি সোজা এগিয়ে সমাধান এবং বিশদ সমাধানের জন্য এখানে যান ।


আমি এখানে গতিশীল পরামিতিগুলি পাস করার কোনও উপায় দেখতে পাচ্ছি না, কেবল হার্ড-কোডড মান।
user1451111

এইভাবে আপনি কেবল মান ID পাস করুন এবং উপাদান এবং ইভেন্টের বিষয়গুলি হারাবেন।
জোল্টন সেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.